Compare commits
40 Commits
Author | SHA1 | Date | |
---|---|---|---|
90a691ed25 | |||
eadb41b3bb | |||
6829590c8f | |||
29da720e6a | |||
c5932c0f07 | |||
6195386a06 | |||
0080440118 | |||
b5be62cd1b | |||
1bac40fbe3 | |||
11637bae43 | |||
301bacec9f | |||
8943b3b0e9 | |||
f59018f2d7 | |||
235cb9c505 | |||
3f328463a8 | |||
e58c82fc04 | |||
91ca86ffe4 | |||
33d4518e50 | |||
b087191d2b | |||
64baea1693 | |||
b88b743428 | |||
c606cf076d | |||
d205d7e7c2 | |||
efdd3375d0 | |||
abcca3d3bc | |||
f4d13b9801 | |||
7da39031e1 | |||
6cdb1bd60c | |||
7c108e267c | |||
5cf06fe9a7 | |||
41f6956197 | |||
417cbea79c | |||
225c807550 | |||
ff78d2655b | |||
bde15f7c61 | |||
30300f1aeb | |||
d42c3a15d6 | |||
14a65559af | |||
ba1e7bd095 | |||
951705a4b2 |
53
NEWS
53
NEWS
@ -1,3 +1,41 @@
|
||||
3.3.4
|
||||
=====
|
||||
* https://live.gnome.org/EveryDetailMatters
|
||||
- Add "browse" for labels for dash items - once a tooltip is
|
||||
showing, switch to other items without a delay [Seif; #666170]
|
||||
- Always scale down windows in the overview at least to 70% [Vit; #646704]
|
||||
- Fix the new-workspace drop indicator sometimes getting stuck
|
||||
[Stefano; #664201]
|
||||
- Delay rearranging windows in the overview as long as the pointer
|
||||
is over a window [Vit; #645325]
|
||||
* Add a GConf => DConf migration file for overriden Mutter settings
|
||||
[Florian; #667636]
|
||||
* When a VPN connection is active, show that as the network icon
|
||||
[Giovanni; #665115]
|
||||
* Handle the "ExtendedAway" IM status as away, not offline [Guillaume; #667813]
|
||||
* Improve the appearance of the labels in "Applications" [Alex; #642392]
|
||||
* Adjust for GTK+ and Mutter API changes for application menu [Ryan; #668118]
|
||||
* Add section label support to the application menu [Giovanni; #666681]
|
||||
* Fix screenshot methods to work again [Cosimo; #667662]
|
||||
* Fix several crashers related to updating workspace thumbnails [Owen; #667652]
|
||||
* Fix memory management error causing gnome-shell-hotplug-sniffer to crash
|
||||
[Owen; #667378]
|
||||
* Build fixes [Emmanuele, Rico; #667864]
|
||||
* Code cleanups [Adel; #668087]
|
||||
* Misc bug fixes [Colin, Florian, Giovanni, Owen, Xavier; #633028, #658817,
|
||||
#664138, #667881, #668048, #668050]
|
||||
|
||||
Contributors:
|
||||
Emmanuele Bassi, Giovanni Campagna, Cosimo Cecchi, Xavier Claessens,
|
||||
Guillaume Desmottes, Stefano Facchini, Adel Gadllah, Alex Hultman,
|
||||
Ryan Lortie, Seif Lotfy, Florian Müllner, Vit Stanislav, Owen Taylor,
|
||||
Rico Tzschichholz, Colin Walters
|
||||
|
||||
Translations:
|
||||
Ihar Hrachyshka [be], Alexander Shopov [bg], Arash Mousavi [fa],
|
||||
Jiri Grönroos, Timo Jyrinki [fi], Fran Diéguez [gl], Kjartan Maraas [nb],
|
||||
Yuri Myasoedov [ru], Matej Urbančič [sl], Nguyễn Thái Ngọc Duy [vi]
|
||||
|
||||
3.3.3
|
||||
=====
|
||||
* https://live.gnome.org/EveryDetailMatters
|
||||
@ -24,20 +62,23 @@
|
||||
* Network menu bug fixes
|
||||
Giovanni; #664124, #665194, #665680, #666429, #666614]
|
||||
* Misc bug fixes [Florian, Jasper, Jonny, Marina, Ron; #647587, #659272,
|
||||
#665261, #666020, #666243]
|
||||
#664138, #665261, #666020, #666243]
|
||||
* Build fixes [Owen]
|
||||
|
||||
Contributors:
|
||||
Jürg Billeter, Giovanni Campagna, Stefano Candori, Cosimo Cecchi,
|
||||
Matthias Clasen, Zan Dobersek, Quentin Glidic, Jonny Lamb, Ryan Lortie,
|
||||
Seif Lotfy, Rui Matos, Florian Müllner, Bastien Nocera, Jasper St. Pierre,
|
||||
Marc Plano-Lesay, Colin Walters, Ron Yorsten, Marina Zhurakhinskaya
|
||||
Marc Plano-Lesay, Owen Taylor, Colin Walters, Ron Yorsten,
|
||||
Marina Zhurakhinskaya
|
||||
|
||||
Translations:
|
||||
Petr Kovar [cz], Kris Thomsen [dk], Daniel Mustieles [es],
|
||||
Ville-Pekka Vainio [fi], Yaron Shahrabani [he], Žygimantas Beručka [lt],
|
||||
Jovan Naumovski [mk], Kjartan Maraas [nb], "Andreas N" [nn],
|
||||
Lucian Adrian Grijincu [ro], Matej Urbančič [sl], Praveen Illa [te],
|
||||
Muhammet Kara [tr], Daniel Korostil [uk], Aron Xu [zh_CN]
|
||||
Ville-Pekka Vainio [fi], Yaron Shahrabani [he], Luca Ferretti [it],
|
||||
Hideki Yamane [ja], Žygimantas Beručka [lt], Jovan Naumovski [mk],
|
||||
Kjartan Maraas [nb], "Andreas N" [nn], Lucian Adrian Grijincu [ro],
|
||||
Matej Urbančič [sl], Praveen Illa [te], Muhammet Kara [tr],
|
||||
Daniel Korostil [uk], Aron Xu [zh_CN]
|
||||
|
||||
3.3.2
|
||||
=====
|
||||
|
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.3.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.3.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -65,12 +65,12 @@ GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||
GJS_MIN_VERSION=1.29.18
|
||||
MUTTER_MIN_VERSION=3.3.3
|
||||
FOLKS_MIN_VERSION=0.5.2
|
||||
GTK_MIN_VERSION=3.0.0
|
||||
GIO_MIN_VERSION=2.31.0
|
||||
GTK_MIN_VERSION=3.3.9
|
||||
GIO_MIN_VERSION=2.31.6
|
||||
LIBECAL_MIN_VERSION=2.32.0
|
||||
LIBEDATASERVER_MIN_VERSION=1.2.0
|
||||
LIBEDATASERVERUI_MIN_VERSION=2.91.6
|
||||
TELEPATHY_GLIB_MIN_VERSION=0.15.5
|
||||
TELEPATHY_GLIB_MIN_VERSION=0.15.6
|
||||
TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
||||
POLKIT_MIN_VERSION=0.100
|
||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||
@ -84,6 +84,7 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
||||
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||
libgnome-menu-3.0 $recorder_modules
|
||||
gdk-x11-3.0 libsoup-2.4
|
||||
gl
|
||||
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
|
||||
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
|
||||
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
|
||||
|
@ -59,6 +59,8 @@ gschemas.compiled: $(gsettings_SCHEMAS:.xml=.valid)
|
||||
|
||||
all-local: gschemas.compiled
|
||||
|
||||
convertdir = $(datadir)/GConf/gsettings
|
||||
convert_DATA = gnome-shell-overrides.convert
|
||||
|
||||
shadersdir = $(pkgdatadir)/shaders
|
||||
shaders_DATA = \
|
||||
@ -69,6 +71,7 @@ EXTRA_DIST = \
|
||||
gnome-shell.desktop.in.in \
|
||||
$(menu_DATA) \
|
||||
$(shaders_DATA) \
|
||||
$(convert_DATA) \
|
||||
org.gnome.shell.gschema.xml.in
|
||||
|
||||
CLEANFILES = \
|
||||
|
5
data/gnome-shell-overrides.convert
Normal file
5
data/gnome-shell-overrides.convert
Normal file
@ -0,0 +1,5 @@
|
||||
[org.gnome.shell.overrides]
|
||||
attach-modal-dialogs = /desktop/gnome/shell/windows/attach_modal_dialogs
|
||||
button-layout = /desktop/gnome/shell/windows/button_layout
|
||||
edge-tiling = /desktop/gnome/shell/windows/edge_tiling
|
||||
workspaces-only-on-primary = /desktop/gnome/shell/windows/workspaces_only_on_primary
|
@ -661,7 +661,7 @@ StTooltip StLabel {
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
color: #ffffff;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
-x-offset: 8px;
|
||||
}
|
||||
@ -740,7 +740,8 @@ StTooltip StLabel {
|
||||
border-radius: 4px;
|
||||
padding: 3px;
|
||||
border: 1px rgba(0,0,0,0);
|
||||
font-size: 7.5pt;
|
||||
font-size: 8pt;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
transition-duration: 100;
|
||||
text-align: center;
|
||||
|
@ -205,7 +205,8 @@ const UserListItem = new Lang.Class({
|
||||
// We use background-image instead of, say, St.TextureCache
|
||||
// so the theme writers can add a rounded frame around the image
|
||||
// and so theme writers can pick the icon size.
|
||||
this._iconBin.set_style('background-image: url("' + iconFile + '");');
|
||||
this._iconBin.set_style('background-image: url("' + iconFile + '");' +
|
||||
'background-size: contain;');
|
||||
} else {
|
||||
this._iconBin.hide();
|
||||
}
|
||||
|
@ -298,7 +298,9 @@ const Dash = new Lang.Class({
|
||||
this._dragPlaceholderPos = -1;
|
||||
this._animatingPlaceholdersCount = 0;
|
||||
this._favRemoveTarget = null;
|
||||
this._labelTimeoutId = 0;
|
||||
this._showLabelTimeoutId = 0;
|
||||
this._resetHoverTimeoutId = 0;
|
||||
this._labelShowing = false;
|
||||
|
||||
this._box = new St.BoxLayout({ name: 'dash',
|
||||
vertical: true,
|
||||
@ -448,18 +450,31 @@ const Dash = new Lang.Class({
|
||||
|
||||
_onHover: function (item, display) {
|
||||
if (display.actor.get_hover() && !display.isMenuUp) {
|
||||
if (this._labelTimeoutId == 0) {
|
||||
this._labelTimeoutId = Mainloop.timeout_add(DASH_ITEM_HOVER_TIMEOUT,
|
||||
if (this._showLabelTimeoutId == 0) {
|
||||
let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT;
|
||||
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,
|
||||
Lang.bind(this, function() {
|
||||
this._labelShowing = true;
|
||||
item.showLabel();
|
||||
return false;
|
||||
}));
|
||||
if (this._resetHoverTimeoutId > 0) {
|
||||
Mainloop.source_remove(this._resetHoverTimeoutId);
|
||||
this._resetHoverTimeoutId = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this._labelTimeoutId > 0)
|
||||
Mainloop.source_remove(this._labelTimeoutId);
|
||||
this._labelTimeoutId = 0;
|
||||
if (this._showLabelTimeoutId > 0)
|
||||
Mainloop.source_remove(this._showLabelTimeoutId);
|
||||
this._showLabelTimeoutId = 0;
|
||||
item.hideLabel();
|
||||
if (this._labelShowing) {
|
||||
this._resetHoverTimeoutId = Mainloop.timeout_add(DASH_ITEM_HOVER_TIMEOUT,
|
||||
Lang.bind(this, function() {
|
||||
this._labelShowing = false;
|
||||
return false;
|
||||
}));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -333,7 +333,8 @@ const EndSessionDialog = new Lang.Class({
|
||||
this._iconBin.child = null;
|
||||
if (iconFile) {
|
||||
this._iconBin.show();
|
||||
this._iconBin.set_style('background-image: url("' + iconFile + '");');
|
||||
this._iconBin.set_style('background-image: url("' + iconFile + '");' +
|
||||
'background-size: contain;');
|
||||
} else {
|
||||
this._iconBin.hide();
|
||||
}
|
||||
|
@ -332,6 +332,7 @@ function _windowRemoved(workspace, window) {
|
||||
workspace._lastRemovedWindow = null;
|
||||
_queueCheckWorkspaces();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -487,7 +487,7 @@ const NotificationDaemon = new Lang.Class({
|
||||
},
|
||||
|
||||
_onTrayIconRemoved: function(o, icon) {
|
||||
let source = this._lookupSource(icon.pid, null, true);
|
||||
let source = this._lookupSource(null, icon.pid, true);
|
||||
if (source)
|
||||
source.destroy();
|
||||
}
|
||||
|
@ -528,6 +528,9 @@ const AppMenuButton = new Lang.Class({
|
||||
if (targetApp) {
|
||||
this._appMenuNotifyId = targetApp.connect('notify::menu', Lang.bind(this, this._sync));
|
||||
this._actionGroupNotifyId = targetApp.connect('notify::action-group', Lang.bind(this, this._sync));
|
||||
} else {
|
||||
this._appMenuNotifyId = 0;
|
||||
this._actionGroupNotifyId = 0;
|
||||
}
|
||||
|
||||
this._targetApp = targetApp;
|
||||
@ -549,7 +552,7 @@ const AppMenuButton = new Lang.Class({
|
||||
_maybeSetMenu: function() {
|
||||
let menu;
|
||||
|
||||
if (this._targetApp.action_group) {
|
||||
if (this._targetApp.action_group && this._targetApp.menu) {
|
||||
if (this.menu instanceof PopupMenu.RemoteMenu &&
|
||||
this.menu.actionGroup == this._targetApp.action_group)
|
||||
return;
|
||||
|
@ -155,9 +155,12 @@ const PlacesManager = new Lang.Class({
|
||||
|
||||
this._connect = new PlaceInfo('special:connect', _("Connect to..."),
|
||||
function (size) {
|
||||
return new St.Icon({ icon_name: 'applications-internet',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: size });
|
||||
// do NOT use St.Icon here, it crashes the shell
|
||||
// see wanda.js for details
|
||||
return St.TextureCache.get_default().load_icon_name('applications-internet',
|
||||
null,
|
||||
St.IconType.FULLCOLOR,
|
||||
size);
|
||||
},
|
||||
function (params) {
|
||||
// BUG: nautilus-connect-server doesn't have a desktop file, so we can't
|
||||
|
@ -393,6 +393,7 @@ const AuthenticationAgent = new Lang.Class({
|
||||
Lang.bind(this,
|
||||
function() {
|
||||
this._reallyCompleteRequest(wasDismissed);
|
||||
return false;
|
||||
}));
|
||||
} else {
|
||||
this._reallyCompleteRequest(wasDismissed);
|
||||
|
@ -1398,12 +1398,23 @@ const PopupMenuSection = new Lang.Class({
|
||||
this.actor = this.box;
|
||||
this.actor._delegate = this;
|
||||
this.isOpen = true;
|
||||
|
||||
// an array of externally managed separators
|
||||
this.separators = [];
|
||||
},
|
||||
|
||||
// deliberately ignore any attempt to open() or close(), but emit the
|
||||
// corresponding signal so children can still pick it up
|
||||
open: function(animate) { this.emit('open-state-changed', true); },
|
||||
close: function() { this.emit('open-state-changed', false); },
|
||||
|
||||
destroy: function() {
|
||||
for (let i = 0; i < this.separators.length; i++)
|
||||
this.separators[i].destroy();
|
||||
this.separators = [];
|
||||
|
||||
this.parent();
|
||||
}
|
||||
});
|
||||
|
||||
const PopupSubMenuMenuItem = new Lang.Class({
|
||||
@ -1737,17 +1748,25 @@ const RemoteMenu = new Lang.Class({
|
||||
},
|
||||
|
||||
_createMenuItem: function(model, index) {
|
||||
let labelValue = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_LABEL, null);
|
||||
let label = labelValue ? labelValue.deep_unpack() : '';
|
||||
// remove all underscores that are not followed by another underscore
|
||||
label = label.replace(/_([^_])/, '$1');
|
||||
|
||||
let section_link = model.get_item_link(index, Gio.MENU_LINK_SECTION);
|
||||
if (section_link) {
|
||||
let item = new PopupMenuSection();
|
||||
if (label) {
|
||||
let title = new PopupMenuItem(label, { reactive: false,
|
||||
style_class: 'popup-subtitle-menu-item' });
|
||||
item._titleMenuItem = title;
|
||||
title._ignored = true;
|
||||
item.addMenuItem(title);
|
||||
}
|
||||
this._modelChanged(section_link, 0, 0, section_link.get_n_items(), item);
|
||||
return [item, true, ''];
|
||||
}
|
||||
|
||||
// labels are not checked for existance, as they're required for all items
|
||||
let label = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_LABEL, null).deep_unpack();
|
||||
// remove all underscores that are not followed by another underscore
|
||||
label = label.replace(/_([^_])/, '$1');
|
||||
let submenu_link = model.get_item_link(index, Gio.MENU_LINK_SUBMENU);
|
||||
|
||||
if (submenu_link) {
|
||||
@ -1831,8 +1850,13 @@ const RemoteMenu = new Lang.Class({
|
||||
|
||||
let currentItems = target._getMenuItems();
|
||||
|
||||
for (j0 = 0, k0 = 0; j0 < position; j0++, k0++) {
|
||||
if (currentItems[k0] instanceof PopupSeparatorMenuItem)
|
||||
k0 = 0;
|
||||
// skip ignored items at the beginning
|
||||
while (k0 < currentItems.length && currentItems[k0]._ignored)
|
||||
k0++;
|
||||
// find the right menu item matching the model item
|
||||
for (j0 = 0; j0 < position; j0++, k0++) {
|
||||
if (currentItems[k0]._ignored)
|
||||
k0++;
|
||||
}
|
||||
|
||||
@ -1844,7 +1868,7 @@ const RemoteMenu = new Lang.Class({
|
||||
for (j = j0, k = k0; j < j0 + removed; j++, k++) {
|
||||
currentItems[k].destroy();
|
||||
|
||||
if (currentItems[k] instanceof PopupSeparatorMenuItem)
|
||||
if (currentItems[k]._ignored)
|
||||
j--;
|
||||
}
|
||||
}
|
||||
@ -1855,14 +1879,20 @@ const RemoteMenu = new Lang.Class({
|
||||
if (item) {
|
||||
// separators must be added in the parent to make autohiding work
|
||||
if (addSeparator) {
|
||||
target.addMenuItem(new PopupSeparatorMenuItem(), k+1);
|
||||
let separator = new PopupSeparatorMenuItem();
|
||||
item.separators.push(separator);
|
||||
separator._ignored = true;
|
||||
target.addMenuItem(separator, k+1);
|
||||
k++;
|
||||
}
|
||||
|
||||
target.addMenuItem(item, k);
|
||||
|
||||
if (addSeparator) {
|
||||
target.addMenuItem(new PopupSeparatorMenuItem(), k+1);
|
||||
let separator = new PopupSeparatorMenuItem();
|
||||
item.separators.push(separator);
|
||||
separator._ignored = true;
|
||||
target.addMenuItem(separator, k+1);
|
||||
k++;
|
||||
}
|
||||
} else if (changeSignal) {
|
||||
@ -1888,6 +1918,9 @@ const RemoteMenu = new Lang.Class({
|
||||
}
|
||||
|
||||
if (target instanceof PopupMenuSection) {
|
||||
if (target._titleMenuItem)
|
||||
target.actor.visible = target.numMenuItems != 1;
|
||||
else
|
||||
target.actor.visible = target.numMenuItems != 0;
|
||||
} else {
|
||||
let sourceItem = target.sourceActor._delegate;
|
||||
|
@ -122,8 +122,13 @@ const GnomeShell = new Lang.Class({
|
||||
* indicating whether the operation was successful or not.
|
||||
*
|
||||
*/
|
||||
ScreenshotAreaAsync : function (x, y, width, height, filename, callback) {
|
||||
global.screenshot_area (x, y, width, height, filename, function (obj, result) { callback(result); });
|
||||
ScreenshotAreaAsync : function (params, invocation) {
|
||||
let [x, y, width, height, filename, callback] = params;
|
||||
global.screenshot_area (x, y, width, height, filename,
|
||||
function (obj, result) {
|
||||
let retval = GLib.Variant.new('(b)', [result]);
|
||||
invocation.return_value(retval);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
@ -149,8 +154,13 @@ const GnomeShell = new Lang.Class({
|
||||
* indicating whether the operation was successful or not.
|
||||
*
|
||||
*/
|
||||
ScreenshotAsync : function (filename, callback) {
|
||||
global.screenshot(filename, function (obj, result) { callback(result); });
|
||||
ScreenshotAsync : function (params, invocation) {
|
||||
let [filename] = params;
|
||||
global.screenshot(filename,
|
||||
function (obj, result) {
|
||||
let retval = GLib.Variant.new('(b)', [result]);
|
||||
invocation.return_value(retval);
|
||||
});
|
||||
},
|
||||
|
||||
ListExtensions: function() {
|
||||
|
@ -1803,6 +1803,7 @@ const NMApplet = new Lang.Class({
|
||||
let activating = null;
|
||||
let default_ip4 = null;
|
||||
let default_ip6 = null;
|
||||
let active_vpn = null;
|
||||
for (let i = 0; i < this._activeConnections.length; i++) {
|
||||
let a = this._activeConnections[i];
|
||||
|
||||
@ -1832,6 +1833,8 @@ const NMApplet = new Lang.Class({
|
||||
default_ip4 = a;
|
||||
if (a.default6)
|
||||
default_ip6 = a;
|
||||
if (a._type == 'vpn')
|
||||
active_vpn = a;
|
||||
|
||||
if (a.state == NetworkManager.ActiveConnectionState.ACTIVATING)
|
||||
activating = a;
|
||||
@ -1862,7 +1865,7 @@ const NMApplet = new Lang.Class({
|
||||
}
|
||||
}
|
||||
|
||||
this._mainConnection = activating || default_ip4 || default_ip6 || this._activeConnections[0] || null;
|
||||
this._mainConnection = activating || active_vpn || default_ip4 || default_ip6 || this._activeConnections[0] || null;
|
||||
},
|
||||
|
||||
_notifyActivated: function(activeConnection) {
|
||||
|
@ -33,10 +33,6 @@ const NotificationDirection = {
|
||||
RECEIVED: 'chat-received'
|
||||
};
|
||||
|
||||
let contactFeatures = [Tp.ContactFeature.ALIAS,
|
||||
Tp.ContactFeature.AVATAR_DATA,
|
||||
Tp.ContactFeature.PRESENCE];
|
||||
|
||||
// This is GNOME Shell's implementation of the Telepathy 'Client'
|
||||
// interface. Specifically, the shell is a Telepathy 'Observer', which
|
||||
// lets us see messages even if they belong to another app (eg,
|
||||
@ -83,11 +79,21 @@ const Client = new Lang.Class({
|
||||
// account path -> AccountNotification
|
||||
this._accountNotifications = {};
|
||||
|
||||
// Define features we want
|
||||
this._accountManager = Tp.AccountManager.dup();
|
||||
let factory = this._accountManager.get_factory();
|
||||
factory.add_account_features([Tp.Account.get_feature_quark_connection()]);
|
||||
factory.add_connection_features([Tp.Connection.get_feature_quark_contact_list()]);
|
||||
factory.add_channel_features([Tp.Channel.get_feature_quark_contacts()]);
|
||||
factory.add_contact_features([Tp.ContactFeature.ALIAS,
|
||||
Tp.ContactFeature.AVATAR_DATA,
|
||||
Tp.ContactFeature.PRESENCE,
|
||||
Tp.ContactFeature.SUBSCRIPTION_STATES]);
|
||||
|
||||
// Set up a SimpleObserver, which will call _observeChannels whenever a
|
||||
// channel matching its filters is detected.
|
||||
// The second argument, recover, means _observeChannels will be run
|
||||
// for any existing channel as well.
|
||||
this._accountManager = Tp.AccountManager.dup();
|
||||
this._tpClient = new Shell.TpClient({ 'account-manager': this._accountManager,
|
||||
'name': 'GnomeShell',
|
||||
'uniquify-name': true })
|
||||
@ -114,16 +120,9 @@ const Client = new Lang.Class({
|
||||
throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
|
||||
}
|
||||
|
||||
|
||||
// Watch subscription requests and connection errors
|
||||
this._subscriptionSource = null;
|
||||
this._accountSource = null;
|
||||
let factory = this._accountManager.get_factory();
|
||||
factory.add_account_features([Tp.Account.get_feature_quark_connection()]);
|
||||
factory.add_connection_features([Tp.Connection.get_feature_quark_contact_list()]);
|
||||
factory.add_contact_features([Tp.ContactFeature.SUBSCRIPTION_STATES,
|
||||
Tp.ContactFeature.ALIAS,
|
||||
Tp.ContactFeature.AVATAR_DATA]);
|
||||
|
||||
this._accountManager.connect('account-validity-changed',
|
||||
Lang.bind(this, this._accountValidityChanged));
|
||||
@ -133,22 +132,6 @@ const Client = new Lang.Class({
|
||||
|
||||
_observeChannels: function(observer, account, conn, channels,
|
||||
dispatchOp, requests, context) {
|
||||
// If the self_contact doesn't have the ALIAS, make sure
|
||||
// to fetch it before trying to grab the channels.
|
||||
let self_contact = conn.get_self_contact();
|
||||
if (self_contact.has_feature(Tp.ContactFeature.ALIAS)) {
|
||||
this._finishObserveChannels(account, conn, channels, context);
|
||||
} else {
|
||||
Shell.get_self_contact_features(conn,
|
||||
contactFeatures,
|
||||
Lang.bind(this, function() {
|
||||
this._finishObserveChannels(account, conn, channels, context);
|
||||
}));
|
||||
context.delay();
|
||||
}
|
||||
},
|
||||
|
||||
_finishObserveChannels: function(account, conn, channels, context) {
|
||||
let len = channels.length;
|
||||
for (let i = 0; i < len; i++) {
|
||||
let channel = channels[i];
|
||||
@ -159,16 +142,7 @@ const Client = new Lang.Class({
|
||||
targetHandleType != Tp.HandleType.CONTACT)
|
||||
continue;
|
||||
|
||||
/* Request a TpContact */
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, function (connection, contacts, failed) {
|
||||
if (contacts.length < 1)
|
||||
return;
|
||||
|
||||
/* We got the TpContact */
|
||||
this._createChatSource(account, conn, channel, contacts[0]);
|
||||
}), null);
|
||||
this._createChatSource(account, conn, channel, channel.get_target_contact());
|
||||
}
|
||||
|
||||
context.accept();
|
||||
@ -234,41 +208,25 @@ const Client = new Lang.Class({
|
||||
|
||||
_displayRoomInvitation: function(conn, channel, dispatchOp, context) {
|
||||
// We can only approve the rooms if we have been invited to it
|
||||
let selfHandle = channel.group_get_self_handle();
|
||||
if (selfHandle == 0) {
|
||||
let selfContact = channel.group_get_self_contact();
|
||||
if (selfContact == null) {
|
||||
Shell.decline_dispatch_op(context, 'Not invited to the room');
|
||||
return;
|
||||
}
|
||||
|
||||
let [invited, inviter, reason, msg] = channel.group_get_local_pending_info(selfHandle);
|
||||
let [invited, inviter, reason, msg] = channel.group_get_local_pending_contact_info(selfContact);
|
||||
if (!invited) {
|
||||
Shell.decline_dispatch_op(context, 'Not invited to the room');
|
||||
return;
|
||||
}
|
||||
|
||||
// Request a TpContact for the inviter
|
||||
Shell.get_tp_contacts(conn, [inviter],
|
||||
contactFeatures,
|
||||
Lang.bind(this, this._createRoomInviteSource, channel, context, dispatchOp));
|
||||
|
||||
context.delay();
|
||||
},
|
||||
|
||||
_createRoomInviteSource: function(connection, contacts, failed, channel, context, dispatchOp) {
|
||||
if (contacts.length < 1) {
|
||||
Shell.decline_dispatch_op(context, 'Failed to get inviter');
|
||||
return;
|
||||
}
|
||||
|
||||
// We got the TpContact
|
||||
|
||||
// FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
// system-users for now as Empathy does.
|
||||
let source = new ApproverSource(dispatchOp, _("Invitation"),
|
||||
Gio.icon_new_for_string('system-users'));
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notif = new RoomInviteNotification(source, dispatchOp, channel, contacts[0]);
|
||||
let notif = new RoomInviteNotification(source, dispatchOp, channel, inviter);
|
||||
source.notify(notif);
|
||||
context.accept();
|
||||
},
|
||||
@ -308,21 +266,6 @@ const Client = new Lang.Class({
|
||||
},
|
||||
|
||||
_approveCall: function(account, conn, channel, dispatchOp, context) {
|
||||
let [targetHandle, targetHandleType] = channel.get_handle();
|
||||
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, this._createAudioVideoSource, channel, context, dispatchOp));
|
||||
|
||||
context.delay();
|
||||
},
|
||||
|
||||
_createAudioVideoSource: function(connection, contacts, failed, channel, context, dispatchOp) {
|
||||
if (contacts.length < 1) {
|
||||
Shell.decline_dispatch_op(context, 'Failed to get inviter');
|
||||
return;
|
||||
}
|
||||
|
||||
let isVideo = false;
|
||||
|
||||
let props = channel.borrow_immutable_properties();
|
||||
@ -337,27 +280,13 @@ const Client = new Lang.Class({
|
||||
Gio.icon_new_for_string('audio-input-microphone'));
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notif = new AudioVideoNotification(source, dispatchOp, channel, contacts[0], isVideo);
|
||||
let notif = new AudioVideoNotification(source, dispatchOp, channel,
|
||||
channel.get_target_contact(), isVideo);
|
||||
source.notify(notif);
|
||||
context.accept();
|
||||
},
|
||||
|
||||
_approveFileTransfer: function(account, conn, channel, dispatchOp, context) {
|
||||
let [targetHandle, targetHandleType] = channel.get_handle();
|
||||
|
||||
Shell.get_tp_contacts(conn, [targetHandle],
|
||||
contactFeatures,
|
||||
Lang.bind(this, this._createFileTransferSource, channel, context, dispatchOp));
|
||||
|
||||
context.delay();
|
||||
},
|
||||
|
||||
_createFileTransferSource: function(connection, contacts, failed, channel, context, dispatchOp) {
|
||||
if (contacts.length < 1) {
|
||||
Shell.decline_dispatch_op(context, 'Failed to get file sender');
|
||||
return;
|
||||
}
|
||||
|
||||
// Use the icon of the file being transferred
|
||||
let gicon = Gio.content_type_get_icon(channel.get_mime_type());
|
||||
|
||||
@ -365,7 +294,8 @@ const Client = new Lang.Class({
|
||||
let source = new ApproverSource(dispatchOp, _("File Transfer"), gicon);
|
||||
Main.messageTray.add(source);
|
||||
|
||||
let notif = new FileTransferNotification(source, dispatchOp, channel, contacts[0]);
|
||||
let notif = new FileTransferNotification(source, dispatchOp, channel,
|
||||
channel.get_target_contact());
|
||||
source.notify(notif);
|
||||
context.accept();
|
||||
},
|
||||
@ -739,12 +669,12 @@ const ChatSource = new Lang.Class({
|
||||
if (presence == Tp.ConnectionPresenceType.AVAILABLE) {
|
||||
msg = _("%s is online.").format(title);
|
||||
shouldNotify = (this._presence == Tp.ConnectionPresenceType.OFFLINE);
|
||||
} else if (presence == Tp.ConnectionPresenceType.OFFLINE ||
|
||||
presence == Tp.ConnectionPresenceType.EXTENDED_AWAY) {
|
||||
} else if (presence == Tp.ConnectionPresenceType.OFFLINE) {
|
||||
presence = Tp.ConnectionPresenceType.OFFLINE;
|
||||
msg = _("%s is offline.").format(title);
|
||||
shouldNotify = (this._presence != Tp.ConnectionPresenceType.OFFLINE);
|
||||
} else if (presence == Tp.ConnectionPresenceType.AWAY) {
|
||||
} else if (presence == Tp.ConnectionPresenceType.AWAY ||
|
||||
presence == Tp.ConnectionPresenceType.EXTENDED_AWAY) {
|
||||
msg = _("%s is away.").format(title);
|
||||
shouldNotify = false;
|
||||
} else if (presence == Tp.ConnectionPresenceType.BUSY) {
|
||||
|
@ -239,7 +239,8 @@ const IMStatusChooserItem = new Lang.Class({
|
||||
},
|
||||
|
||||
_setIconFromFile: function(iconFile) {
|
||||
this._iconBin.set_style('background-image: url("' + iconFile + '");');
|
||||
this._iconBin.set_style('background-image: url("' + iconFile + '");' +
|
||||
'background-size: contain;');
|
||||
this._iconBin.child = null;
|
||||
},
|
||||
|
||||
|
@ -23,6 +23,8 @@ const WINDOW_DND_SIZE = 256;
|
||||
|
||||
const SCROLL_SCALE_AMOUNT = 100 / 5;
|
||||
|
||||
const WINDOW_CLONE_MAXIMUM_SCALE = 0.7;
|
||||
|
||||
const LIGHTBOX_FADE_TIME = 0.1;
|
||||
const CLOSE_BUTTON_FADE_TIME = 0.1;
|
||||
|
||||
@ -964,7 +966,7 @@ const Workspace = new Lang.Class({
|
||||
|
||||
let scale = Math.min((width - buttonOuterWidth) / rect.width,
|
||||
(height - buttonOuterHeight - captionHeight) / rect.height,
|
||||
1.0);
|
||||
WINDOW_CLONE_MAXIMUM_SCALE);
|
||||
|
||||
x = Math.floor(x + (width - scale * rect.width) / 2);
|
||||
|
||||
@ -1155,6 +1157,12 @@ const Workspace = new Lang.Class({
|
||||
return true;
|
||||
}
|
||||
|
||||
let actorUnderPointer = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
if (this._windows[i].actor == actorUnderPointer)
|
||||
return true;
|
||||
}
|
||||
|
||||
this.positionWindows(WindowPositionFlags.ANIMATE);
|
||||
return false;
|
||||
},
|
||||
|
@ -154,6 +154,8 @@ const WorkspaceThumbnail = new Lang.Class({
|
||||
this.metaWorkspace = metaWorkspace;
|
||||
this.monitorIndex = Main.layoutManager.primaryIndex;
|
||||
|
||||
this._removed = false;
|
||||
|
||||
this.actor = new St.Group({ reactive: true,
|
||||
clip_to_allocation: true,
|
||||
style_class: 'workspace-thumbnail' });
|
||||
@ -179,17 +181,21 @@ const WorkspaceThumbnail = new Lang.Class({
|
||||
let monitor = Main.layoutManager.primaryMonitor;
|
||||
this.setPorthole(monitor.x, monitor.y, monitor.width, monitor.height);
|
||||
|
||||
let windows = global.get_window_actors().filter(this._isMyWindow, this);
|
||||
let windows = global.get_window_actors().filter(this._isWorkspaceWindow, this);
|
||||
|
||||
// Create clones for windows that should be visible in the Overview
|
||||
this._windows = [];
|
||||
this._allWindows = [];
|
||||
this._minimizedChangedIds = [];
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
windows[i].meta_window._minimizedChangedId =
|
||||
let minimizedChangedId =
|
||||
windows[i].meta_window.connect('notify::minimized',
|
||||
Lang.bind(this,
|
||||
this._updateMinimized));
|
||||
this._allWindows.push(windows[i].meta_window);
|
||||
this._minimizedChangedIds.push(minimizedChangedId);
|
||||
|
||||
if (this._isOverviewWindow(windows[i])) {
|
||||
if (this._isMyWindow(windows[i]) && this._isOverviewWindow(windows[i])) {
|
||||
this._addWindowClone(windows[i]);
|
||||
}
|
||||
}
|
||||
@ -274,17 +280,11 @@ const WorkspaceThumbnail = new Lang.Class({
|
||||
let clone = this._windows[index];
|
||||
this._windows.splice(index, 1);
|
||||
|
||||
if (win && this._isOverviewWindow(win)) {
|
||||
if (metaWin._minimizedChangedId) {
|
||||
metaWin.disconnect(metaWin._minimizedChangedId);
|
||||
delete metaWin._minimizedChangedId;
|
||||
}
|
||||
}
|
||||
clone.destroy();
|
||||
},
|
||||
|
||||
_doAddWindow : function(metaWin) {
|
||||
if (this.leavingOverview)
|
||||
if (this._removed)
|
||||
return;
|
||||
|
||||
let win = metaWin.get_compositor_private();
|
||||
@ -294,7 +294,7 @@ const WorkspaceThumbnail = new Lang.Class({
|
||||
// the compositor finds out about them...
|
||||
Mainloop.idle_add(Lang.bind(this,
|
||||
function () {
|
||||
if (this.actor &&
|
||||
if (!this._removed &&
|
||||
metaWin.get_compositor_private() &&
|
||||
metaWin.get_workspace() == this.metaWorkspace)
|
||||
this._doAddWindow(metaWin);
|
||||
@ -303,16 +303,19 @@ const WorkspaceThumbnail = new Lang.Class({
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._allWindows.indexOf(metaWin) == -1) {
|
||||
let minimizedChangedId = metaWin.connect('notify::minimized',
|
||||
Lang.bind(this,
|
||||
this._updateMinimized));
|
||||
this._allWindows.push(metaWin);
|
||||
this._minimizedChangedIds.push(minimizedChangedId);
|
||||
}
|
||||
|
||||
// We might have the window in our list already if it was on all workspaces and
|
||||
// now was moved to this workspace
|
||||
if (this._lookupIndex (metaWin) != -1)
|
||||
return;
|
||||
|
||||
if (!metaWin._minimizedChangedId)
|
||||
metaWin._minimizedChangedId = metaWin.connect('notify::minimized',
|
||||
Lang.bind(this,
|
||||
this._updateMinimized));
|
||||
|
||||
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
|
||||
return;
|
||||
|
||||
@ -324,6 +327,13 @@ const WorkspaceThumbnail = new Lang.Class({
|
||||
},
|
||||
|
||||
_windowRemoved : function(metaWorkspace, metaWin) {
|
||||
let index = this._allWindows.indexOf(metaWin);
|
||||
if (index != -1) {
|
||||
metaWin.disconnect(this._minimizedChangedIds[index]);
|
||||
this._allWindows.splice(index, 1);
|
||||
this._minimizedChangedIds.splice(index, 1);
|
||||
}
|
||||
|
||||
this._doRemoveWindow(metaWin);
|
||||
},
|
||||
|
||||
@ -350,27 +360,36 @@ const WorkspaceThumbnail = new Lang.Class({
|
||||
this.actor.destroy();
|
||||
},
|
||||
|
||||
_onDestroy: function(actor) {
|
||||
workspaceRemoved : function() {
|
||||
if (this._removed)
|
||||
return;
|
||||
|
||||
this._removed = true;
|
||||
|
||||
this.metaWorkspace.disconnect(this._windowAddedId);
|
||||
this.metaWorkspace.disconnect(this._windowRemovedId);
|
||||
global.screen.disconnect(this._windowEnteredMonitorId);
|
||||
global.screen.disconnect(this._windowLeftMonitorId);
|
||||
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let metaWin = this._windows[i].metaWindow;
|
||||
if (metaWin._minimizedChangedId) {
|
||||
metaWin.disconnect(metaWin._minimizedChangedId);
|
||||
delete metaWin._minimizedChangedId;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < this._allWindows.length; i++)
|
||||
this._allWindows[i].disconnect(this._minimizedChangedIds[i]);
|
||||
},
|
||||
|
||||
_onDestroy: function(actor) {
|
||||
this.workspaceRemoved();
|
||||
|
||||
this._windows = [];
|
||||
this.actor = null;
|
||||
},
|
||||
|
||||
// Tests if @win belongs to this workspace
|
||||
_isWorkspaceWindow : function (win) {
|
||||
return Main.isWindowActorDisplayedOnWorkspace(win, this.metaWorkspace.index());
|
||||
},
|
||||
|
||||
// Tests if @win belongs to this workspace and monitor
|
||||
_isMyWindow : function (win) {
|
||||
return Main.isWindowActorDisplayedOnWorkspace(win, this.metaWorkspace.index()) &&
|
||||
return this._isWorkspaceWindow(win) &&
|
||||
(!win.get_meta_window() || win.get_meta_window().get_monitor() == this.monitorIndex);
|
||||
},
|
||||
|
||||
@ -528,6 +547,59 @@ const ThumbnailsBox = new Lang.Class({
|
||||
this._stateCounts[ThumbnailState[key]] = 0;
|
||||
|
||||
this._thumbnails = [];
|
||||
|
||||
Main.overview.connect('item-drag-begin',
|
||||
Lang.bind(this, this._onDragBegin));
|
||||
Main.overview.connect('item-drag-end',
|
||||
Lang.bind(this, this._onDragEnd));
|
||||
Main.overview.connect('item-drag-cancelled',
|
||||
Lang.bind(this, this._onDragCancelled));
|
||||
Main.overview.connect('window-drag-begin',
|
||||
Lang.bind(this, this._onDragBegin));
|
||||
Main.overview.connect('window-drag-end',
|
||||
Lang.bind(this, this._onDragEnd));
|
||||
Main.overview.connect('window-drag-cancelled',
|
||||
Lang.bind(this, this._onDragCancelled));
|
||||
},
|
||||
|
||||
_onDragBegin: function() {
|
||||
this._dragCancelled = false;
|
||||
this._dragMonitor = {
|
||||
dragMotion: Lang.bind(this, this._onDragMotion)
|
||||
};
|
||||
DND.addDragMonitor(this._dragMonitor);
|
||||
},
|
||||
|
||||
_onDragEnd: function() {
|
||||
if (this._dragCancelled)
|
||||
return;
|
||||
|
||||
this._endDrag();
|
||||
},
|
||||
|
||||
_onDragCancelled: function() {
|
||||
this._dragCancelled = true;
|
||||
this._endDrag();
|
||||
},
|
||||
|
||||
_endDrag: function() {
|
||||
this._clearDragPlaceholder();
|
||||
DND.removeDragMonitor(this._dragMonitor);
|
||||
},
|
||||
|
||||
_onDragMotion: function(dragEvent) {
|
||||
if (!this.actor.contains(dragEvent.targetActor))
|
||||
this._onLeave();
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
},
|
||||
|
||||
_onLeave: function() {
|
||||
this._clearDragPlaceholder();
|
||||
},
|
||||
|
||||
_clearDragPlaceholder: function() {
|
||||
this._dropPlaceholderPos = -1;
|
||||
this.actor.queue_relayout();
|
||||
},
|
||||
|
||||
// Draggable target interface
|
||||
@ -679,8 +751,10 @@ const ThumbnailsBox = new Lang.Class({
|
||||
if (thumbnail.state > ThumbnailState.NORMAL)
|
||||
continue;
|
||||
|
||||
if (currentPos >= start && currentPos < start + count)
|
||||
if (currentPos >= start && currentPos < start + count) {
|
||||
thumbnail.workspaceRemoved();
|
||||
this._setThumbnailState(thumbnail, ThumbnailState.REMOVING);
|
||||
}
|
||||
|
||||
currentPos++;
|
||||
}
|
||||
|
399
po/nb.po
399
po/nb.po
@ -2,16 +2,16 @@
|
||||
# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
#
|
||||
# Kjartan Maraas <kmaraas@gnome.org>, 2009-2011.
|
||||
# Kjartan Maraas <kmaraas@gnome.org>, 2009-2012.
|
||||
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 3.3.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-12-01 20:16+0100\n"
|
||||
"PO-Revision-Date: 2011-12-01 20:18+0100\n"
|
||||
"POT-Creation-Date: 2012-01-06 21:16+0100\n"
|
||||
"PO-Revision-Date: 2012-01-06 21:18+0100\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -27,6 +27,10 @@ msgid "Window management and application launching"
|
||||
msgstr "Vindushåndtering og oppstart av programmer"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr "Aktiver interne verktøy for utviklere og testere fra Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
@ -34,51 +38,111 @@ msgstr ""
|
||||
"Tillat tilgang til interne feilsøkings- og overvåkingsverktøy ved å bruke "
|
||||
"Alt-F2-dialogen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr "Aktiver interne verktøy for utviklere og testere fra Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Filendelse i bruk ved lagring av skjermvideo"
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Uuider på utvidelser som skal slås på"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should be loaded. Any extension that wants to be loaded needs to be in this "
|
||||
"list. You can also manipulate this list with the EnableExtension and "
|
||||
"DisableExtension DBus methods on org.gnome.Shell."
|
||||
msgstr "GNOME Shell-utvidelser har en uuid-egenskap. Denne nøkkelen lister utvidelser som skal lastes. Alle utvidelser som ønsker å bli lastet må være i denne listen. Du kan også manipulere denne listen med DBus-metodene EnablExtension og DisableExtension på org.gnome.Shell."
|
||||
msgstr ""
|
||||
"GNOME Shell-utvidelser har en uuid-egenskap. Denne nøkkelen lister "
|
||||
"utvidelser som skal lastes. Alle utvidelser som ønsker å bli lastet må være "
|
||||
"i denne listen. Du kan også manipulere denne listen med DBus-metodene "
|
||||
"EnablExtension og DisableExtension på org.gnome.Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Om det skal samles statistikk om bruk av programmer"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Historikk for kommandodialog (Alt-F2)"
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"GNOME Shell vil normalt holde øye med åpne programmer for å kunne vise de "
|
||||
"mest bruke (for eksempel i oppstartsmenyer). Denne informasjonen vil bli "
|
||||
"holdt privat, men du kan deaktivere denne lagringen av personvernårsaker. "
|
||||
"Hvis du slår det av, vil det ikke fjerne allerede lagret informasjon."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "Historikk for forstørrelsesglass-dialogen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Viser dato i tillegg til tid i klokken hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Viser sekunder i klokken hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Viser ISO-ukedato i kalenderen hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Liste av skrivebordfil-ider for favorittprogrammer"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Programmene som passer til disse identifikatorene vil bli vist i "
|
||||
"favorittområdet."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "OpenSearch tilbydere slått av"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Historikk for kommandodialog (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "Historikk for forstørrelsesglass-dialogen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Vis dato for uken i kalender"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Viser ISO-ukedato i kalenderen hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Tastatur som skal brukes"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Type tastatur som skal brukes."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Vis tid med sekunder"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Viser sekunder i klokken hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid "Show date in clock"
|
||||
msgstr "Vis dato i klokken"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Viser dato i tillegg til tid i klokken hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
|
||||
"skjermvideoopptaker i bilder per sekund."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#, fuzzy, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@ -95,27 +159,11 @@ msgstr ""
|
||||
"Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som "
|
||||
"brukes for gst-launch. Røret må ha en..."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Vis dato i klokken"
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Filendelse i bruk ved lagring av skjermvideo"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Vis dato for uken i kalender"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Vis tid med sekunder"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Programmene som passer til disse identifikatorene vil bli vist i "
|
||||
"favorittområdet."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -125,50 +173,6 @@ msgstr ""
|
||||
"og bruke denne filendelsen. Den bør endres når du gjør opptak til et nytt "
|
||||
"oppbevaringsformat."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
|
||||
"skjermvideoopptaker i bilder per sekund."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"GNOME Shell vil normalt holde øye med åpne programmer for å kunne vise de "
|
||||
"mest bruke (for eksempel i oppstartsmenyer). Denne informasjonen vil bli "
|
||||
"holdt privat, men du kan deaktivere denne lagringen av personvernårsaker. "
|
||||
"Hvis du slår det av, vil det ikke fjerne allerede lagret informasjon."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Type tastatur som skal brukes."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "Uuider på utvidelser som skal slås på"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Om det skal samles statistikk om bruk av programmer"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Tastatur som skal brukes"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "OpenSearch tilbydere slått av"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:623
|
||||
msgid "Session..."
|
||||
msgstr "Økt …"
|
||||
@ -247,15 +251,15 @@ msgstr "PROGRAMMER"
|
||||
msgid "SETTINGS"
|
||||
msgstr "INNSTILLINGER"
|
||||
|
||||
#: ../js/ui/appDisplay.js:664
|
||||
#: ../js/ui/appDisplay.js:666
|
||||
msgid "New Window"
|
||||
msgstr "Nytt vindu"
|
||||
|
||||
#: ../js/ui/appDisplay.js:667
|
||||
#: ../js/ui/appDisplay.js:669
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Fjern fra favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:668
|
||||
#: ../js/ui/appDisplay.js:670
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Legg til i favoritter"
|
||||
|
||||
@ -428,8 +432,8 @@ msgstr "Denne uken"
|
||||
msgid "Next week"
|
||||
msgstr "Neste uke"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:63 ../js/ui/notificationDaemon.js:466
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:350
|
||||
#: ../js/ui/contactDisplay.js:63 ../js/ui/notificationDaemon.js:486
|
||||
#: ../js/ui/status/power.js:215 ../src/shell-app.c:394
|
||||
msgid "Unknown"
|
||||
msgstr "Ukjent"
|
||||
|
||||
@ -453,7 +457,7 @@ msgstr "Frakoblet"
|
||||
msgid "CONTACTS"
|
||||
msgstr "KONTAKTER"
|
||||
|
||||
#: ../js/ui/dash.js:169 ../js/ui/messageTray.js:1204
|
||||
#: ../js/ui/dash.js:229 ../js/ui/messageTray.js:1204
|
||||
msgid "Remove"
|
||||
msgstr "Fjern"
|
||||
|
||||
@ -685,7 +689,7 @@ msgstr "Fjern demping"
|
||||
msgid "Mute"
|
||||
msgstr "Demp"
|
||||
|
||||
#: ../js/ui/messageTray.js:2424
|
||||
#: ../js/ui/messageTray.js:2444
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformasjon"
|
||||
|
||||
@ -770,37 +774,35 @@ msgstr "Nettverkspassord for mobilt bredbånd"
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Et passord kreves for å koble til «%s»."
|
||||
|
||||
#: ../js/ui/overview.js:89
|
||||
#: ../js/ui/overview.js:90
|
||||
msgid "Undo"
|
||||
msgstr "Angre"
|
||||
|
||||
#: ../js/ui/overview.js:198
|
||||
#: ../js/ui/overview.js:199
|
||||
msgid "Windows"
|
||||
msgstr "Vinduer"
|
||||
|
||||
#: ../js/ui/overview.js:201
|
||||
#: ../js/ui/overview.js:202
|
||||
msgid "Applications"
|
||||
msgstr "Programmer"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:223
|
||||
#: ../js/ui/overview.js:226
|
||||
msgid "Dash"
|
||||
msgstr "Favoritter"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:532
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Avslutt %s"
|
||||
#: ../js/ui/panel.js:564
|
||||
msgid "Quit"
|
||||
msgstr "Avslutt"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:565
|
||||
#: ../js/ui/panel.js:595
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
#: ../js/ui/panel.js:953
|
||||
#: ../js/ui/panel.js:982
|
||||
msgid "Top Bar"
|
||||
msgstr "Topp-panel"
|
||||
|
||||
@ -850,7 +852,7 @@ msgstr "Passord:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:717
|
||||
#: ../js/ui/popupMenu.js:719
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -932,6 +934,7 @@ msgstr "Stor tekst"
|
||||
#: ../js/ui/status/bluetooth.js:35 ../js/ui/status/bluetooth.js:258
|
||||
#: ../js/ui/status/bluetooth.js:341 ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:436
|
||||
#: ../js/ui/status/network.js:892
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -952,7 +955,7 @@ msgid "Bluetooth Settings"
|
||||
msgstr "Innstillinger for Bluetooth"
|
||||
|
||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||
#: ../js/ui/status/bluetooth.js:107
|
||||
#: ../js/ui/status/bluetooth.js:107 ../js/ui/status/network.js:255
|
||||
msgid "hardware disabled"
|
||||
msgstr "maskinvare slått av"
|
||||
|
||||
@ -960,11 +963,11 @@ msgstr "maskinvare slått av"
|
||||
msgid "Connection"
|
||||
msgstr "Tilkobling"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:475
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:490
|
||||
msgid "disconnecting..."
|
||||
msgstr "kobler fra …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:481
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:496
|
||||
msgid "connecting..."
|
||||
msgstr "kobler til …"
|
||||
|
||||
@ -1015,7 +1018,7 @@ msgstr "Alltid gi tilgang"
|
||||
msgid "Grant this time only"
|
||||
msgstr "Gi tilgang kun denne ene gangen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1181
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1168
|
||||
msgid "Reject"
|
||||
msgstr "Avvis"
|
||||
|
||||
@ -1068,75 +1071,75 @@ msgid "<unknown>"
|
||||
msgstr "<ukjent>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:275
|
||||
#: ../js/ui/status/network.js:277
|
||||
msgid "disabled"
|
||||
msgstr "slått av"
|
||||
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||
#: ../js/ui/status/network.js:473
|
||||
#: ../js/ui/status/network.js:488
|
||||
msgid "unmanaged"
|
||||
msgstr "ikke håndtert"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:484
|
||||
#: ../js/ui/status/network.js:499
|
||||
msgid "authentication required"
|
||||
msgstr "autentisering kreves"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:509
|
||||
msgid "firmware missing"
|
||||
msgstr "fastvare mangler"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:501
|
||||
#: ../js/ui/status/network.js:516
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel koblet fra"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:506
|
||||
#: ../js/ui/status/network.js:521
|
||||
msgid "unavailable"
|
||||
msgstr "ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/status/network.js:508
|
||||
#: ../js/ui/status/network.js:523
|
||||
msgid "connection failed"
|
||||
msgstr "tilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:564 ../js/ui/status/network.js:1506
|
||||
#: ../js/ui/status/network.js:584 ../js/ui/status/network.js:1504
|
||||
msgid "More..."
|
||||
msgstr "Mer …"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:600 ../js/ui/status/network.js:1441
|
||||
#: ../js/ui/status/network.js:620 ../js/ui/status/network.js:1439
|
||||
msgid "Connected (private)"
|
||||
msgstr "Tilkoblet (privat)"
|
||||
|
||||
#: ../js/ui/status/network.js:675
|
||||
#: ../js/ui/status/network.js:695
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatisk Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:736
|
||||
#: ../js/ui/status/network.js:756
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatisk bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:739
|
||||
#: ../js/ui/status/network.js:759
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatisk oppringt"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:858 ../js/ui/status/network.js:1453
|
||||
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1451
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatisk %s"
|
||||
|
||||
#: ../js/ui/status/network.js:860
|
||||
#: ../js/ui/status/network.js:880
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatisk Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:1453
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatisk trådløst"
|
||||
|
||||
@ -1279,44 +1282,44 @@ msgstr "Mikrofon"
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:267
|
||||
msgid "Invitation"
|
||||
msgstr "Invitasjon"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:324
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
msgid "Call"
|
||||
msgstr "Ring"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:354
|
||||
#: ../js/ui/telepathyClient.js:365
|
||||
msgid "File Transfer"
|
||||
msgstr "Filoverføring"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:435
|
||||
#: ../js/ui/telepathyClient.js:446
|
||||
msgid "Subscription request"
|
||||
msgstr "Forespørsel om abbonering"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:471
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
msgid "Connection error"
|
||||
msgstr "Feil ved tilkobling"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:735
|
||||
#: ../js/ui/telepathyClient.js:740
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s er tilkoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:740
|
||||
#: ../js/ui/telepathyClient.js:745
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s er frakoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:743
|
||||
#: ../js/ui/telepathyClient.js:748
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "«%s» er borte."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:746
|
||||
#: ../js/ui/telepathyClient.js:751
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s er opptatt."
|
||||
@ -1324,35 +1327,35 @@ msgstr "%s er opptatt."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:977
|
||||
#: ../js/ui/telepathyClient.js:964
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Sendt <b>%X</b> på <b>%A</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:983
|
||||
#: ../js/ui/telepathyClient.js:970
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:988
|
||||
#: ../js/ui/telepathyClient.js:975
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Sendt <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1030
|
||||
#: ../js/ui/telepathyClient.js:1017
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s er nå kjent som %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1132
|
||||
#: ../js/ui/telepathyClient.js:1119
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Invitasjon til %s"
|
||||
@ -1360,35 +1363,35 @@ msgstr "Invitasjon til %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1127
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s inviterer deg til å bli med i %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1142 ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1320
|
||||
#: ../js/ui/telepathyClient.js:1129 ../js/ui/telepathyClient.js:1209
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
msgid "Decline"
|
||||
msgstr "Avslå"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1143 ../js/ui/telepathyClient.js:1223
|
||||
#: ../js/ui/telepathyClient.js:1321
|
||||
#: ../js/ui/telepathyClient.js:1130 ../js/ui/telepathyClient.js:1210
|
||||
#: ../js/ui/telepathyClient.js:1308
|
||||
msgid "Accept"
|
||||
msgstr "Godta"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1160
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "Videosamtale fra %s"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1163
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "Samtale fra %s"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1183
|
||||
#: ../js/ui/telepathyClient.js:1170
|
||||
msgid "Answer"
|
||||
msgstr "Svar"
|
||||
|
||||
@ -1397,110 +1400,110 @@ msgstr "Svar"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1216
|
||||
#: ../js/ui/telepathyClient.js:1203
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s sender deg %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1285
|
||||
#: ../js/ui/telepathyClient.js:1272
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1378
|
||||
#: ../js/ui/telepathyClient.js:1365
|
||||
msgid "Network error"
|
||||
msgstr "Nettverksfeil"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1380
|
||||
#: ../js/ui/telepathyClient.js:1367
|
||||
msgid "Authentication failed"
|
||||
msgstr "Autentisering feilet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1382
|
||||
#: ../js/ui/telepathyClient.js:1369
|
||||
msgid "Encryption error"
|
||||
msgstr "Feil ved kryptering"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1384
|
||||
#: ../js/ui/telepathyClient.js:1371
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Sertifikat ikke oppgitt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1386
|
||||
#: ../js/ui/telepathyClient.js:1373
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Stoler ikke på sertifikatet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1388
|
||||
#: ../js/ui/telepathyClient.js:1375
|
||||
msgid "Certificate expired"
|
||||
msgstr "Sertifikatet er utløpt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1390
|
||||
#: ../js/ui/telepathyClient.js:1377
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Sertifikatet er ikke aktivert"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1392
|
||||
#: ../js/ui/telepathyClient.js:1379
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Feil vertsnavn for sertifikat"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1394
|
||||
#: ../js/ui/telepathyClient.js:1381
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Feil fingeravtrykk for sertifikat"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1396
|
||||
#: ../js/ui/telepathyClient.js:1383
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Sertifikatet er selvsignert"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1398
|
||||
#: ../js/ui/telepathyClient.js:1385
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Status er satt til frakoblet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1400
|
||||
#: ../js/ui/telepathyClient.js:1387
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Kryptering er ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1402
|
||||
#: ../js/ui/telepathyClient.js:1389
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Sertifikatet er ugyldig"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1404
|
||||
#: ../js/ui/telepathyClient.js:1391
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Tilkobling ble nektet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
#: ../js/ui/telepathyClient.js:1393
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Tilkobling kan ikke etableres"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
#: ../js/ui/telepathyClient.js:1395
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Tilkobling tapt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
#: ../js/ui/telepathyClient.js:1397
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Denne ressursen er allerede koblet til tjeneren"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr ""
|
||||
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Kontoen eksisterer allerede på tjeneren"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
#: ../js/ui/telepathyClient.js:1403
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Sertifikatet er tilbaketrukket"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
#: ../js/ui/telepathyClient.js:1407
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
#: ../js/ui/telepathyClient.js:1409
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
@ -1510,20 +1513,20 @@ msgstr ""
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
#: ../js/ui/telepathyClient.js:1419
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Tilkobling til %s feilet"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1441
|
||||
#: ../js/ui/telepathyClient.js:1428
|
||||
msgid "Reconnect"
|
||||
msgstr "Koble til på nytt"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
#: ../js/ui/telepathyClient.js:1429
|
||||
msgid "Edit account"
|
||||
msgstr "Rediger konto"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1488
|
||||
#: ../js/ui/telepathyClient.js:1475
|
||||
msgid "Unknown reason"
|
||||
msgstr "Ukjent årsak"
|
||||
|
||||
@ -1592,6 +1595,24 @@ msgstr "Skriv for å søke …"
|
||||
msgid "Search"
|
||||
msgstr "Søk"
|
||||
|
||||
#: ../js/ui/wanda.js:124
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Sorry, no wisdom for you today:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
"Beklager, ingen visdom til deg i dag:\n"
|
||||
"%s"
|
||||
|
||||
#: ../js/ui/wanda.js:128
|
||||
#, c-format
|
||||
msgid "%s the Oracle says"
|
||||
msgstr "Orakelet sier %s"
|
||||
|
||||
#: ../js/ui/wanda.js:168
|
||||
msgid "Your favorite Easter Egg"
|
||||
msgstr "Favorittpåskeegget ditt"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:33
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
@ -1619,15 +1640,15 @@ msgstr[1] "%u innganger"
|
||||
msgid "System Sounds"
|
||||
msgstr "Systemlyder"
|
||||
|
||||
#: ../src/main.c:508
|
||||
#: ../src/main.c:262
|
||||
msgid "Print version"
|
||||
msgstr "Skriv ut versjon"
|
||||
|
||||
#: ../src/main.c:514
|
||||
#: ../src/main.c:268
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Modus som brukes av GDM for innloggingsskjermen"
|
||||
|
||||
#: ../src/shell-app.c:567
|
||||
#: ../src/shell-app.c:639
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Klarte ikke å starte «%s»"
|
||||
|
333
po/sl.po
333
po/sl.po
@ -2,14 +2,14 @@
|
||||
# Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
#
|
||||
# Matej Urbančič <mateju@svn.gnome.org>, 2009 - 2011.
|
||||
# Matej Urbančič <mateju@svn.gnome.org>, 2009 - 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-11-24 08:51+0000\n"
|
||||
"PO-Revision-Date: 2011-11-25 20:55+0100\n"
|
||||
"POT-Creation-Date: 2012-01-15 01:35+0000\n"
|
||||
"PO-Revision-Date: 2012-01-15 13:44+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"Language: Slovenian\n"
|
||||
@ -130,50 +130,50 @@ msgstr "Katera tipkovnica naj bo uporabljena?"
|
||||
msgid "disabled OpenSearch providers"
|
||||
msgstr "ponudniki OpenSearch so bili onemogočeni"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:623
|
||||
#: ../js/gdm/loginDialog.js:624
|
||||
msgid "Session..."
|
||||
msgstr "Seja ..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:785
|
||||
#: ../js/gdm/loginDialog.js:786
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "Prijava"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:830
|
||||
#: ../js/gdm/loginDialog.js:831
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(ali pa povlecite prst)"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:851
|
||||
#: ../js/gdm/loginDialog.js:852
|
||||
msgid "Not listed?"
|
||||
msgstr "Ali je ni na seznamu?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1019
|
||||
#: ../js/ui/endSessionDialog.js:418
|
||||
#: ../js/gdm/loginDialog.js:1020
|
||||
#: ../js/ui/endSessionDialog.js:419
|
||||
#: ../js/ui/extensionSystem.js:516
|
||||
#: ../js/ui/networkAgent.js:145
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175
|
||||
#: ../js/ui/status/bluetooth.js:463
|
||||
#: ../js/ui/status/bluetooth.js:462
|
||||
msgid "Cancel"
|
||||
msgstr "Prekliči"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1024
|
||||
#: ../js/gdm/loginDialog.js:1025
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Prijava"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1376
|
||||
#: ../js/gdm/loginDialog.js:1377
|
||||
msgid "Login Window"
|
||||
msgstr "Prijavno okno"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:113
|
||||
#: ../js/ui/userMenu.js:578
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:649
|
||||
#: ../js/ui/userMenu.js:579
|
||||
#: ../js/ui/userMenu.js:581
|
||||
#: ../js/ui/userMenu.js:650
|
||||
msgid "Suspend"
|
||||
msgstr "Zaustavi"
|
||||
|
||||
@ -213,15 +213,15 @@ msgstr "Programi"
|
||||
msgid "SETTINGS"
|
||||
msgstr "NASTAVITVE"
|
||||
|
||||
#: ../js/ui/appDisplay.js:664
|
||||
#: ../js/ui/appDisplay.js:666
|
||||
msgid "New Window"
|
||||
msgstr "Novo okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:667
|
||||
#: ../js/ui/appDisplay.js:669
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odstrani iz priljubljenih"
|
||||
|
||||
#: ../js/ui/appDisplay.js:668
|
||||
#: ../js/ui/appDisplay.js:670
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj med priljubljene"
|
||||
|
||||
@ -395,9 +395,9 @@ msgid "Next week"
|
||||
msgstr "Naslednji teden"
|
||||
|
||||
#: ../js/ui/contactDisplay.js:63
|
||||
#: ../js/ui/notificationDaemon.js:466
|
||||
#: ../js/ui/notificationDaemon.js:486
|
||||
#: ../js/ui/status/power.js:215
|
||||
#: ../src/shell-app.c:350
|
||||
#: ../src/shell-app.c:394
|
||||
msgid "Unknown"
|
||||
msgstr "Neznano"
|
||||
|
||||
@ -424,7 +424,7 @@ msgstr "Nepovezano"
|
||||
msgid "CONTACTS"
|
||||
msgstr "Stiki"
|
||||
|
||||
#: ../js/ui/dash.js:169
|
||||
#: ../js/ui/dash.js:229
|
||||
#: ../js/ui/messageTray.js:1204
|
||||
msgid "Remove"
|
||||
msgstr "Odstrani"
|
||||
@ -665,7 +665,7 @@ msgstr "Povrni glasnost"
|
||||
msgid "Mute"
|
||||
msgstr "Utišaj"
|
||||
|
||||
#: ../js/ui/messageTray.js:2424
|
||||
#: ../js/ui/messageTray.js:2444
|
||||
msgid "System Information"
|
||||
msgstr "Podrobnosti sistema"
|
||||
|
||||
@ -749,15 +749,15 @@ msgstr "Geslo mobilnega širokopasovnega dostopa"
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "Za povezavo z omrežjem '%s' je zahtevano geslo."
|
||||
|
||||
#: ../js/ui/overview.js:89
|
||||
#: ../js/ui/overview.js:90
|
||||
msgid "Undo"
|
||||
msgstr "Razveljavi"
|
||||
|
||||
#: ../js/ui/overview.js:201
|
||||
#: ../js/ui/overview.js:199
|
||||
msgid "Windows"
|
||||
msgstr "Okna"
|
||||
|
||||
#: ../js/ui/overview.js:204
|
||||
#: ../js/ui/overview.js:202
|
||||
msgid "Applications"
|
||||
msgstr "Programi"
|
||||
|
||||
@ -767,19 +767,17 @@ msgstr "Programi"
|
||||
msgid "Dash"
|
||||
msgstr "Armaturna plošča"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:532
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Končaj %s"
|
||||
#: ../js/ui/panel.js:564
|
||||
msgid "Quit"
|
||||
msgstr "Končaj"
|
||||
|
||||
#. Translators: If there is no suitable word for "Activities"
|
||||
#. in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:565
|
||||
#: ../js/ui/panel.js:595
|
||||
msgid "Activities"
|
||||
msgstr "Dejavnosti"
|
||||
|
||||
#: ../js/ui/panel.js:953
|
||||
#: ../js/ui/panel.js:982
|
||||
msgid "Top Bar"
|
||||
msgstr "Vrhnja vrstica"
|
||||
|
||||
@ -796,7 +794,7 @@ msgstr "Poskusi znova"
|
||||
msgid "Connect to..."
|
||||
msgstr "Povezava z ..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:364
|
||||
#: ../js/ui/placeDisplay.js:367
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "Mesta in naprave"
|
||||
|
||||
@ -829,7 +827,7 @@ msgstr "Geslo:"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:717
|
||||
#: ../js/ui/popupMenu.js:719
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -908,137 +906,139 @@ msgstr "Visok kontrast"
|
||||
msgid "Large Text"
|
||||
msgstr "Veliko besedilo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:36
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/bluetooth.js:342
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:437
|
||||
#: ../js/ui/status/bluetooth.js:35
|
||||
#: ../js/ui/status/bluetooth.js:258
|
||||
#: ../js/ui/status/bluetooth.js:341
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436
|
||||
#: ../js/ui/status/network.js:892
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:49
|
||||
#: ../js/ui/status/bluetooth.js:48
|
||||
msgid "Visibility"
|
||||
msgstr "Vidnost"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:63
|
||||
#: ../js/ui/status/bluetooth.js:62
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "Pošilji datoteke na napravo ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:64
|
||||
#: ../js/ui/status/bluetooth.js:63
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "Nastavitev nove naprave ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:88
|
||||
#: ../js/ui/status/bluetooth.js:87
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Nastavitve za Bluetooth"
|
||||
|
||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||
#: ../js/ui/status/bluetooth.js:108
|
||||
#: ../js/ui/status/bluetooth.js:107
|
||||
#: ../js/ui/status/network.js:255
|
||||
msgid "hardware disabled"
|
||||
msgstr "strojno onemogočen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:204
|
||||
#: ../js/ui/status/bluetooth.js:203
|
||||
msgid "Connection"
|
||||
msgstr "Povezava"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
#: ../js/ui/status/network.js:475
|
||||
#: ../js/ui/status/bluetooth.js:214
|
||||
#: ../js/ui/status/network.js:490
|
||||
msgid "disconnecting..."
|
||||
msgstr "prekinjanje povezave ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:228
|
||||
#: ../js/ui/status/network.js:481
|
||||
#: ../js/ui/status/bluetooth.js:227
|
||||
#: ../js/ui/status/network.js:496
|
||||
msgid "connecting..."
|
||||
msgstr "povezovanje ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:246
|
||||
#: ../js/ui/status/bluetooth.js:245
|
||||
msgid "Send Files..."
|
||||
msgstr "Pošlji datoteke ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
#: ../js/ui/status/bluetooth.js:250
|
||||
msgid "Browse Files..."
|
||||
msgstr "Brskanje datotek ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:260
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
msgid "Error browsing device"
|
||||
msgstr "Napaka med brskanjem po napravi"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:261
|
||||
#: ../js/ui/status/bluetooth.js:260
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Po zahtevani naprave ni mogoče brskati, napaka je '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:269
|
||||
#: ../js/ui/status/bluetooth.js:268
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Nastavitve tipkovnice"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:272
|
||||
#: ../js/ui/status/bluetooth.js:271
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Nastavitve miške"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:277
|
||||
#: ../js/ui/status/bluetooth.js:276
|
||||
#: ../js/ui/status/volume.js:58
|
||||
msgid "Sound Settings"
|
||||
msgstr "Nastavitve zvoka"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:373
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Zahteva za pooblastitev od %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:379
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Naprava %s želi dostop do storitve '%s'."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
msgid "Always grant access"
|
||||
msgstr "Vedno odobri dostop"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
msgid "Grant this time only"
|
||||
msgstr "Odobri le tokrat"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:383
|
||||
#: ../js/ui/telepathyClient.js:1181
|
||||
#: ../js/ui/status/bluetooth.js:382
|
||||
#: ../js/ui/telepathyClient.js:1098
|
||||
msgid "Reject"
|
||||
msgstr "Zavrni"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Potrditev razčlenjevanja za %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
#: ../js/ui/status/bluetooth.js:444
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Naprava %s se poskuša seznaniti s tem računalnikom"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:416
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Potrdite, ali se PIN '%s' ujema s tistim na napravi."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
msgstr "Ujemanja"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:419
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
msgid "Does not match"
|
||||
msgstr "Se ne ujema"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:438
|
||||
#: ../js/ui/status/bluetooth.js:437
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Zahteva razčlenjevanja za %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:446
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Vnesite PIN, ki je naveden na napravi."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:462
|
||||
#: ../js/ui/status/bluetooth.js:461
|
||||
msgid "OK"
|
||||
msgstr "V redu"
|
||||
|
||||
@ -1055,78 +1055,78 @@ msgid "<unknown>"
|
||||
msgstr "<neznano>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:275
|
||||
#: ../js/ui/status/network.js:277
|
||||
msgid "disabled"
|
||||
msgstr "onemogočeno"
|
||||
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||
#: ../js/ui/status/network.js:473
|
||||
#: ../js/ui/status/network.js:488
|
||||
msgid "unmanaged"
|
||||
msgstr "neupravljano"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:484
|
||||
#: ../js/ui/status/network.js:499
|
||||
msgid "authentication required"
|
||||
msgstr "zahtevana je overitev"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:509
|
||||
msgid "firmware missing"
|
||||
msgstr "manjka strojna programska oprema"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:501
|
||||
#: ../js/ui/status/network.js:516
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel ni priklopljen"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:506
|
||||
#: ../js/ui/status/network.js:521
|
||||
msgid "unavailable"
|
||||
msgstr "ni na voljo"
|
||||
|
||||
#: ../js/ui/status/network.js:508
|
||||
#: ../js/ui/status/network.js:523
|
||||
msgid "connection failed"
|
||||
msgstr "povezovanje je spodletelo"
|
||||
|
||||
#: ../js/ui/status/network.js:564
|
||||
#: ../js/ui/status/network.js:1506
|
||||
#: ../js/ui/status/network.js:584
|
||||
#: ../js/ui/status/network.js:1504
|
||||
msgid "More..."
|
||||
msgstr "Več ..."
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:600
|
||||
#: ../js/ui/status/network.js:1441
|
||||
#: ../js/ui/status/network.js:620
|
||||
#: ../js/ui/status/network.js:1439
|
||||
msgid "Connected (private)"
|
||||
msgstr "Povezano (zasebna povezava)"
|
||||
|
||||
#: ../js/ui/status/network.js:675
|
||||
#: ../js/ui/status/network.js:695
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Samodejni eternet"
|
||||
|
||||
#: ../js/ui/status/network.js:736
|
||||
#: ../js/ui/status/network.js:756
|
||||
msgid "Auto broadband"
|
||||
msgstr "Samodejni širokopasovni dostop"
|
||||
|
||||
#: ../js/ui/status/network.js:739
|
||||
#: ../js/ui/status/network.js:759
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Samodejni klicni dostop"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:858
|
||||
#: ../js/ui/status/network.js:1453
|
||||
#: ../js/ui/status/network.js:878
|
||||
#: ../js/ui/status/network.js:1451
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Samodejna povezava z %s"
|
||||
|
||||
#: ../js/ui/status/network.js:860
|
||||
#: ../js/ui/status/network.js:880
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Samodejna povezava z Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1455
|
||||
#: ../js/ui/status/network.js:1453
|
||||
msgid "Auto wireless"
|
||||
msgstr "Samodejni brezžični dostop"
|
||||
|
||||
@ -1275,47 +1275,46 @@ msgstr "Glasnost"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#. We got the TpContact
|
||||
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
||||
#. system-users for now as Empathy does.
|
||||
#: ../js/ui/telepathyClient.js:256
|
||||
#: ../js/ui/telepathyClient.js:225
|
||||
msgid "Invitation"
|
||||
msgstr "Povabilo"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:324
|
||||
#: ../js/ui/telepathyClient.js:278
|
||||
msgid "Call"
|
||||
msgstr "Pokliči"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:354
|
||||
#: ../js/ui/telepathyClient.js:294
|
||||
msgid "File Transfer"
|
||||
msgstr "Prenos datotek"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:435
|
||||
#: ../js/ui/telepathyClient.js:376
|
||||
msgid "Subscription request"
|
||||
msgstr "Zahteva po naročilu"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:471
|
||||
#: ../js/ui/telepathyClient.js:412
|
||||
msgid "Connection error"
|
||||
msgstr "Napaka povezovanja"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:735
|
||||
#: ../js/ui/telepathyClient.js:670
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s je povezan."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:740
|
||||
#: ../js/ui/telepathyClient.js:674
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s ni povezan."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:743
|
||||
#: ../js/ui/telepathyClient.js:678
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s je odsoten."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:746
|
||||
#: ../js/ui/telepathyClient.js:681
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s je zaposlen."
|
||||
@ -1323,35 +1322,35 @@ msgstr "%s je zaposlen."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:977
|
||||
#: ../js/ui/telepathyClient.js:894
|
||||
#, no-c-format
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "Poslano <b>%A</b> ob <b>%X</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:983
|
||||
#: ../js/ui/telepathyClient.js:900
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "Poslano <b>%A</b>, <b>%d. %Ba</b>"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:988
|
||||
#: ../js/ui/telepathyClient.js:905
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "Poslano <b>%A</b>, <b>%d. %Ba</b>, %Y"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:1030
|
||||
#: ../js/ui/telepathyClient.js:947
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s je sedaj znan kot v %s"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1132
|
||||
#: ../js/ui/telepathyClient.js:1049
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "Povabilo v %s"
|
||||
@ -1359,37 +1358,37 @@ msgstr "Povabilo v %s"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1057
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s vas vabi, da se pridružite v %s"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1142
|
||||
#: ../js/ui/telepathyClient.js:1222
|
||||
#: ../js/ui/telepathyClient.js:1320
|
||||
#: ../js/ui/telepathyClient.js:1059
|
||||
#: ../js/ui/telepathyClient.js:1139
|
||||
#: ../js/ui/telepathyClient.js:1237
|
||||
msgid "Decline"
|
||||
msgstr "Zavrni"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1143
|
||||
#: ../js/ui/telepathyClient.js:1223
|
||||
#: ../js/ui/telepathyClient.js:1321
|
||||
#: ../js/ui/telepathyClient.js:1060
|
||||
#: ../js/ui/telepathyClient.js:1140
|
||||
#: ../js/ui/telepathyClient.js:1238
|
||||
msgid "Accept"
|
||||
msgstr "Sprejmi"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1173
|
||||
#: ../js/ui/telepathyClient.js:1090
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s želi vzpostaviti video klic"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1176
|
||||
#: ../js/ui/telepathyClient.js:1093
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s kliče"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1183
|
||||
#: ../js/ui/telepathyClient.js:1100
|
||||
msgid "Answer"
|
||||
msgstr "Odgovori"
|
||||
|
||||
@ -1398,125 +1397,125 @@ msgstr "Odgovori"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1216
|
||||
#: ../js/ui/telepathyClient.js:1133
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s pošilja %s"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1285
|
||||
#: ../js/ui/telepathyClient.js:1202
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "%s želi dovoljenje za pogled dosegljivosti"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1378
|
||||
#: ../js/ui/telepathyClient.js:1295
|
||||
msgid "Network error"
|
||||
msgstr "Napaka omrežja"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1380
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
msgid "Authentication failed"
|
||||
msgstr "Overitev je spodletela"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1382
|
||||
#: ../js/ui/telepathyClient.js:1299
|
||||
msgid "Encryption error"
|
||||
msgstr "Napaka šifriranja"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1384
|
||||
#: ../js/ui/telepathyClient.js:1301
|
||||
msgid "Certificate not provided"
|
||||
msgstr "Potrdilo ni na voljo"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1386
|
||||
#: ../js/ui/telepathyClient.js:1303
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "Potrdilo ni zaupljivo"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1388
|
||||
#: ../js/ui/telepathyClient.js:1305
|
||||
msgid "Certificate expired"
|
||||
msgstr "Potrdilo je preteklo"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1390
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
msgid "Certificate not activated"
|
||||
msgstr "Potrdilo ni potrjeno"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1392
|
||||
#: ../js/ui/telepathyClient.js:1309
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "Neustrezno ime gostitelja potrdila"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1394
|
||||
#: ../js/ui/telepathyClient.js:1311
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "Neustrezen prstni odtis potrdila"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1396
|
||||
#: ../js/ui/telepathyClient.js:1313
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "Potrdilo je samo-podpisano"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1398
|
||||
#: ../js/ui/telepathyClient.js:1315
|
||||
msgid "Status is set to offline"
|
||||
msgstr "Stanje je nastavljeno na brez povezave"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1400
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
msgid "Encryption is not available"
|
||||
msgstr "Šifriranje ni na voljo."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1402
|
||||
#: ../js/ui/telepathyClient.js:1319
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "Potrdilo je neveljavno."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1404
|
||||
#: ../js/ui/telepathyClient.js:1321
|
||||
msgid "Connection has been refused"
|
||||
msgstr "Povezava je zavrnjena."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1406
|
||||
#: ../js/ui/telepathyClient.js:1323
|
||||
msgid "Connection can't be established"
|
||||
msgstr "Povezave ni mogoče vzpostaviti."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1408
|
||||
#: ../js/ui/telepathyClient.js:1325
|
||||
msgid "Connection has been lost"
|
||||
msgstr "Povezava je prekinjena."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1410
|
||||
#: ../js/ui/telepathyClient.js:1327
|
||||
msgid "This resource is already connected to the server"
|
||||
msgstr "Vir je s strežnikom že povezan"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1412
|
||||
#: ../js/ui/telepathyClient.js:1329
|
||||
msgid "Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "Povezava je zamenjana z novo povezavo, ki uporablja isti vir."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1414
|
||||
#: ../js/ui/telepathyClient.js:1331
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "Račun na strežniku že obstaja"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1416
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "Strežnik je trenutno preveč zaposlen za upravljanje s povezavo."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1418
|
||||
#: ../js/ui/telepathyClient.js:1335
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "Potrdilo je preklicano"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1420
|
||||
#: ../js/ui/telepathyClient.js:1337
|
||||
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr "Potrdilo ne uporablja varnega algoritma ali pa uporablja šibko šifriranje."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1422
|
||||
#: ../js/ui/telepathyClient.js:1339
|
||||
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
|
||||
msgstr "Dolžina potrdila strežnika ali pa globina verige potrdila presega omejitev, ki je določena s šifrirno knjižnico."
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1432
|
||||
#: ../js/ui/telepathyClient.js:1349
|
||||
#, c-format
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "Povezava z %s je spodletela"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1441
|
||||
#: ../js/ui/telepathyClient.js:1358
|
||||
msgid "Reconnect"
|
||||
msgstr "Ponovno se poveži"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1442
|
||||
#: ../js/ui/telepathyClient.js:1359
|
||||
msgid "Edit account"
|
||||
msgstr "Uredi račun"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1488
|
||||
#: ../js/ui/telepathyClient.js:1405
|
||||
msgid "Unknown reason"
|
||||
msgstr "Neznan vzrok"
|
||||
|
||||
@ -1532,41 +1531,41 @@ msgstr "Nedejavno"
|
||||
msgid "Unavailable"
|
||||
msgstr "Nedostopno"
|
||||
|
||||
#: ../js/ui/userMenu.js:576
|
||||
#: ../js/ui/userMenu.js:580
|
||||
#: ../js/ui/userMenu.js:650
|
||||
#: ../js/ui/userMenu.js:577
|
||||
#: ../js/ui/userMenu.js:581
|
||||
#: ../js/ui/userMenu.js:651
|
||||
msgid "Power Off..."
|
||||
msgstr "Izklop ..."
|
||||
|
||||
#: ../js/ui/userMenu.js:612
|
||||
#: ../js/ui/userMenu.js:613
|
||||
msgid "Notifications"
|
||||
msgstr "Obvestila"
|
||||
|
||||
#: ../js/ui/userMenu.js:620
|
||||
#: ../js/ui/userMenu.js:621
|
||||
msgid "Online Accounts"
|
||||
msgstr "Spletni računi"
|
||||
|
||||
#: ../js/ui/userMenu.js:624
|
||||
#: ../js/ui/userMenu.js:625
|
||||
msgid "System Settings"
|
||||
msgstr "Sistemske nastavitve"
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:632
|
||||
msgid "Lock Screen"
|
||||
msgstr "Zakleni zaslon"
|
||||
|
||||
#: ../js/ui/userMenu.js:636
|
||||
#: ../js/ui/userMenu.js:637
|
||||
msgid "Switch User"
|
||||
msgstr "Preklopi uporabnika"
|
||||
|
||||
#: ../js/ui/userMenu.js:641
|
||||
#: ../js/ui/userMenu.js:642
|
||||
msgid "Log Out..."
|
||||
msgstr "Odjava ..."
|
||||
|
||||
#: ../js/ui/userMenu.js:669
|
||||
#: ../js/ui/userMenu.js:670
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
|
||||
|
||||
#: ../js/ui/userMenu.js:670
|
||||
#: ../js/ui/userMenu.js:671
|
||||
msgid "Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."
|
||||
msgstr "Obveščanje je zdaj onemogočeno, vključno s sporočili klepeta. Vaše stanje povezanosti se je prilagodilo, da bodo drugi vedeli, da njihovih sporočil morda ne boste opazili."
|
||||
|
||||
@ -1583,6 +1582,24 @@ msgstr "Vtipkajte za iskanje ..."
|
||||
msgid "Search"
|
||||
msgstr "Poišči"
|
||||
|
||||
#: ../js/ui/wanda.js:124
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Sorry, no wisdom for you today:\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
"Za danes ni modrosti:\n"
|
||||
"%s"
|
||||
|
||||
#: ../js/ui/wanda.js:128
|
||||
#, c-format
|
||||
msgid "%s the Oracle says"
|
||||
msgstr "Riba %s pravi"
|
||||
|
||||
#: ../js/ui/wanda.js:168
|
||||
msgid "Your favorite Easter Egg"
|
||||
msgstr "Vaše priljubljeno velikonočno jajce"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:33
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
@ -1614,15 +1631,15 @@ msgstr[3] "%u dovodi naprave"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sistemski zvoki"
|
||||
|
||||
#: ../src/main.c:508
|
||||
#: ../src/main.c:262
|
||||
msgid "Print version"
|
||||
msgstr "Izpiši različico"
|
||||
|
||||
#: ../src/main.c:514
|
||||
#: ../src/main.c:268
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Način uporabljen v GDM za prijavni naslov"
|
||||
|
||||
#: ../src/shell-app.c:567
|
||||
#: ../src/shell-app.c:639
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Zaganjanje '%s' je spodletelo"
|
||||
|
@ -114,10 +114,7 @@ sniff_async_ready_cb (GObject *source,
|
||||
{
|
||||
InvocationData *data = user_data;
|
||||
gchar **types;
|
||||
gint idx;
|
||||
GError *error = NULL;
|
||||
GVariantBuilder *builder;
|
||||
GVariant *result;
|
||||
|
||||
types = shell_mime_sniffer_sniff_finish (SHELL_MIME_SNIFFER (source),
|
||||
res, &error);
|
||||
@ -129,16 +126,8 @@ sniff_async_ready_cb (GObject *source,
|
||||
goto out;
|
||||
}
|
||||
|
||||
builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
|
||||
|
||||
for (idx = 0; types[idx] != NULL; idx++)
|
||||
g_variant_builder_add (builder, "s", types[idx]);
|
||||
|
||||
result = g_variant_new ("(as)", builder);
|
||||
g_dbus_method_invocation_return_value (data->invocation, result);
|
||||
|
||||
g_variant_unref (result);
|
||||
g_variant_builder_unref (builder);
|
||||
g_dbus_method_invocation_return_value (data->invocation,
|
||||
g_variant_new ("(^as)", types));
|
||||
g_strfreev (types);
|
||||
|
||||
out:
|
||||
|
265
src/shell-app.c
265
src/shell-app.c
@ -40,13 +40,8 @@ typedef struct {
|
||||
gboolean window_sort_stale : 1;
|
||||
|
||||
/* See GApplication documentation */
|
||||
gint name_watcher_id;
|
||||
gchar *dbus_name;
|
||||
GDBusProxy *app_proxy;
|
||||
GActionGroup *remote_actions;
|
||||
GMenuModel *remote_menu;
|
||||
GDBusMenuModel *remote_menu;
|
||||
GActionMuxer *muxer;
|
||||
GCancellable *dbus_cancellable;
|
||||
} ShellAppRunningState;
|
||||
|
||||
/**
|
||||
@ -99,14 +94,8 @@ enum {
|
||||
static guint shell_app_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static void create_running_state (ShellApp *app);
|
||||
static void setup_running_state (ShellApp *app, MetaWindow *window);
|
||||
static void unref_running_state (ShellAppRunningState *state);
|
||||
static void on_dbus_name_appeared (GDBusConnection *bus,
|
||||
const gchar *name,
|
||||
const gchar *name_owner,
|
||||
gpointer user_data);
|
||||
static void on_dbus_name_disappeared (GDBusConnection *bus,
|
||||
const gchar *name,
|
||||
gpointer user_data);
|
||||
|
||||
G_DEFINE_TYPE (ShellApp, shell_app, G_TYPE_OBJECT)
|
||||
|
||||
@ -126,9 +115,6 @@ shell_app_get_property (GObject *gobject,
|
||||
case PROP_ID:
|
||||
g_value_set_string (value, shell_app_get_id (app));
|
||||
break;
|
||||
case PROP_DBUS_ID:
|
||||
g_value_set_string (value, shell_app_get_dbus_id (app));
|
||||
break;
|
||||
case PROP_ACTION_GROUP:
|
||||
if (app->running_state)
|
||||
g_value_set_object (value, app->running_state->muxer);
|
||||
@ -186,15 +172,6 @@ window_backed_app_get_icon (ShellApp *app,
|
||||
return actor;
|
||||
}
|
||||
|
||||
const char *
|
||||
shell_app_get_dbus_id (ShellApp *app)
|
||||
{
|
||||
if (app->running_state)
|
||||
return app->running_state->dbus_name;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_app_create_icon_texture:
|
||||
*
|
||||
@ -563,7 +540,7 @@ shell_app_update_window_actions (ShellApp *app, MetaWindow *window)
|
||||
{
|
||||
const char *object_path;
|
||||
|
||||
object_path = meta_window_get_dbus_object_path (window);
|
||||
object_path = meta_window_get_gtk_window_object_path (window);
|
||||
if (object_path != NULL)
|
||||
{
|
||||
GActionGroup *actions;
|
||||
@ -571,8 +548,8 @@ shell_app_update_window_actions (ShellApp *app, MetaWindow *window)
|
||||
actions = g_object_get_data (G_OBJECT (window), "actions");
|
||||
if (actions == NULL)
|
||||
{
|
||||
actions = G_ACTION_GROUP (g_dbus_action_group_get (g_dbus_proxy_get_connection (app->running_state->app_proxy),
|
||||
meta_window_get_dbus_unique_name (window),
|
||||
actions = G_ACTION_GROUP (g_dbus_action_group_get (g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL),
|
||||
meta_window_get_gtk_unique_bus_name (window),
|
||||
object_path));
|
||||
g_object_set_data_full (G_OBJECT (window), "actions", actions, g_object_unref);
|
||||
}
|
||||
@ -975,34 +952,6 @@ shell_app_on_ws_switch (MetaScreen *screen,
|
||||
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
|
||||
}
|
||||
|
||||
static void
|
||||
on_dbus_application_id_changed (MetaWindow *window,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
{
|
||||
const char *appid;
|
||||
ShellApp *app = SHELL_APP (user_data);
|
||||
|
||||
/* Ignore changes in the appid after it's set, shouldn't happen */
|
||||
if (app->running_state->dbus_name != NULL)
|
||||
return;
|
||||
|
||||
appid = meta_window_get_dbus_application_id (window);
|
||||
|
||||
if (!appid)
|
||||
return;
|
||||
|
||||
g_assert (app->running_state != NULL);
|
||||
app->running_state->dbus_name = g_strdup (appid);
|
||||
app->running_state->name_watcher_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
||||
appid,
|
||||
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
||||
on_dbus_name_appeared,
|
||||
on_dbus_name_disappeared,
|
||||
g_object_ref (app),
|
||||
g_object_unref);
|
||||
}
|
||||
|
||||
void
|
||||
_shell_app_add_window (ShellApp *app,
|
||||
MetaWindow *window)
|
||||
@ -1020,12 +969,11 @@ _shell_app_add_window (ShellApp *app,
|
||||
g_signal_connect (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app);
|
||||
g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app);
|
||||
|
||||
setup_running_state (app, window);
|
||||
|
||||
if (app->state != SHELL_APP_STATE_STARTING)
|
||||
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
|
||||
|
||||
g_signal_connect (window, "notify::dbus-application-id", G_CALLBACK(on_dbus_application_id_changed), app);
|
||||
on_dbus_application_id_changed (window, NULL, app);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (app));
|
||||
|
||||
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
|
||||
@ -1042,7 +990,6 @@ _shell_app_remove_window (ShellApp *app,
|
||||
|
||||
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(shell_app_on_unmanaged), app);
|
||||
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(shell_app_on_user_time_changed), app);
|
||||
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(on_dbus_application_id_changed), app);
|
||||
g_object_unref (window);
|
||||
app->running_state->windows = g_slist_remove (app->running_state->windows, window);
|
||||
|
||||
@ -1052,137 +999,6 @@ _shell_app_remove_window (ShellApp *app,
|
||||
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
|
||||
}
|
||||
|
||||
static void
|
||||
on_dbus_proxy_gotten (GObject *initable,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
ShellApp *self = SHELL_APP (user_data);
|
||||
ShellAppRunningState *state = self->running_state;
|
||||
GError *error = NULL;
|
||||
GVariant *menu_property;
|
||||
|
||||
state->app_proxy = g_dbus_proxy_new_finish (result,
|
||||
&error);
|
||||
|
||||
if (error)
|
||||
{
|
||||
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) &&
|
||||
!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD))
|
||||
{
|
||||
g_warning ("Unexpected error while creating application proxy: %s", error->message);
|
||||
}
|
||||
|
||||
g_clear_error (&error);
|
||||
g_clear_object (&state->dbus_cancellable);
|
||||
|
||||
if (state->name_watcher_id)
|
||||
{
|
||||
g_bus_unwatch_name (state->name_watcher_id);
|
||||
state->name_watcher_id = 0;
|
||||
}
|
||||
|
||||
g_free (state->dbus_name);
|
||||
state->dbus_name = NULL;
|
||||
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
/* on to the second step, the primary action group */
|
||||
|
||||
state->remote_actions = (GActionGroup*)g_dbus_action_group_get (
|
||||
g_dbus_proxy_get_connection (state->app_proxy),
|
||||
g_dbus_proxy_get_name (state->app_proxy),
|
||||
g_dbus_proxy_get_object_path (state->app_proxy));
|
||||
|
||||
if (!state->muxer)
|
||||
state->muxer = g_action_muxer_new ();
|
||||
|
||||
g_action_muxer_insert (state->muxer, "app", state->remote_actions);
|
||||
g_strfreev (g_action_group_list_actions (state->remote_actions));
|
||||
|
||||
g_object_notify (G_OBJECT (self), "action-group");
|
||||
|
||||
menu_property = g_dbus_proxy_get_cached_property (state->app_proxy, "AppMenu");
|
||||
|
||||
if (menu_property && g_variant_n_children (menu_property) > 0)
|
||||
{
|
||||
const gchar *object_path;
|
||||
|
||||
g_variant_get_child (menu_property, 0, "&o", &object_path);
|
||||
|
||||
state->remote_menu = G_MENU_MODEL (g_dbus_menu_model_get (g_dbus_proxy_get_connection (state->app_proxy),
|
||||
state->dbus_name,
|
||||
object_path));
|
||||
|
||||
g_object_notify (G_OBJECT (self), "menu");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_dbus_name_appeared (GDBusConnection *bus,
|
||||
const gchar *name,
|
||||
const gchar *name_owner,
|
||||
gpointer user_data)
|
||||
{
|
||||
ShellApp *self = SHELL_APP (user_data);
|
||||
ShellAppRunningState *state = self->running_state;
|
||||
char *object_path;
|
||||
|
||||
g_assert (state != NULL);
|
||||
|
||||
object_path = g_strconcat ("/", name, NULL);
|
||||
g_strdelimit (object_path, ".", '/');
|
||||
|
||||
if (!state->dbus_cancellable)
|
||||
state->dbus_cancellable = g_cancellable_new ();
|
||||
|
||||
/* first step: the application proxy */
|
||||
|
||||
g_dbus_proxy_new (bus,
|
||||
G_DBUS_PROXY_FLAGS_NONE,
|
||||
NULL, /* interface info */
|
||||
name_owner,
|
||||
object_path,
|
||||
"org.gtk.Application",
|
||||
state->dbus_cancellable,
|
||||
on_dbus_proxy_gotten,
|
||||
g_object_ref (self));
|
||||
|
||||
g_object_notify (G_OBJECT (self), "dbus-id");
|
||||
|
||||
g_free (object_path);
|
||||
}
|
||||
|
||||
static void
|
||||
on_dbus_name_disappeared (GDBusConnection *bus,
|
||||
const gchar *name,
|
||||
gpointer user_data)
|
||||
{
|
||||
ShellApp *self = SHELL_APP (user_data);
|
||||
ShellAppRunningState *state = self->running_state;
|
||||
|
||||
g_assert (state != NULL);
|
||||
|
||||
if (state->dbus_cancellable)
|
||||
{
|
||||
g_cancellable_cancel (state->dbus_cancellable);
|
||||
g_clear_object (&state->dbus_cancellable);
|
||||
}
|
||||
|
||||
g_clear_object (&state->app_proxy);
|
||||
g_clear_object (&state->remote_actions);
|
||||
g_clear_object (&state->remote_menu);
|
||||
g_clear_object (&state->muxer);
|
||||
|
||||
g_free (state->dbus_name);
|
||||
state->dbus_name = NULL;
|
||||
|
||||
g_bus_unwatch_name (state->name_watcher_id);
|
||||
state->name_watcher_id = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_app_get_pids:
|
||||
* @app: a #ShellApp
|
||||
@ -1395,6 +1211,47 @@ create_running_state (ShellApp *app)
|
||||
app->running_state->refcount = 1;
|
||||
app->running_state->workspace_switch_id =
|
||||
g_signal_connect (screen, "workspace-switched", G_CALLBACK(shell_app_on_ws_switch), app);
|
||||
|
||||
app->running_state->muxer = g_action_muxer_new ();
|
||||
}
|
||||
|
||||
static void
|
||||
setup_running_state (ShellApp *app,
|
||||
MetaWindow *window)
|
||||
{
|
||||
/* We assume that 'gtk-unique-bus-name', gtk-application-object-path'
|
||||
* and 'gtk-app-menu-object-path' are the same for all windows which
|
||||
* have it set.
|
||||
*
|
||||
* It could be possible, however, that the first window we see
|
||||
* belonging to the app didn't have them set. For this reason, we
|
||||
* take the values from the first window that has them set and ignore
|
||||
* all the rest (until the app is stopped and restarted).
|
||||
*/
|
||||
|
||||
if (app->running_state->remote_menu == NULL)
|
||||
{
|
||||
const gchar *application_object_path;
|
||||
const gchar *app_menu_object_path;
|
||||
const gchar *unique_bus_name;
|
||||
GDBusConnection *session;
|
||||
GDBusActionGroup *actions;
|
||||
|
||||
application_object_path = meta_window_get_gtk_application_object_path (window);
|
||||
app_menu_object_path = meta_window_get_gtk_app_menu_object_path (window);
|
||||
unique_bus_name = meta_window_get_gtk_unique_bus_name (window);
|
||||
|
||||
if (application_object_path == NULL || app_menu_object_path == NULL || unique_bus_name == NULL)
|
||||
return;
|
||||
|
||||
session = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||
g_assert (session != NULL);
|
||||
app->running_state->remote_menu = g_dbus_menu_model_get (session, unique_bus_name, app_menu_object_path);
|
||||
actions = g_dbus_action_group_get (session, unique_bus_name, application_object_path);
|
||||
g_action_muxer_insert (app->running_state->muxer, "app", G_ACTION_GROUP (actions));
|
||||
g_object_unref (actions);
|
||||
g_object_unref (session);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1411,20 +1268,8 @@ unref_running_state (ShellAppRunningState *state)
|
||||
screen = shell_global_get_screen (shell_global_get ());
|
||||
g_signal_handler_disconnect (screen, state->workspace_switch_id);
|
||||
|
||||
if (state->dbus_cancellable)
|
||||
{
|
||||
g_cancellable_cancel (state->dbus_cancellable);
|
||||
g_object_unref (state->dbus_cancellable);
|
||||
}
|
||||
|
||||
g_clear_object (&state->app_proxy);
|
||||
g_clear_object (&state->remote_actions);
|
||||
g_clear_object (&state->remote_menu);
|
||||
g_clear_object (&state->muxer);
|
||||
g_free (state->dbus_name);
|
||||
|
||||
if (state->name_watcher_id)
|
||||
g_bus_unwatch_name (state->name_watcher_id);
|
||||
|
||||
g_slice_free (ShellAppRunningState, state);
|
||||
}
|
||||
@ -1669,20 +1514,6 @@ shell_app_class_init(ShellAppClass *klass)
|
||||
NULL,
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* ShellApp:dbus-id:
|
||||
*
|
||||
* The DBus well-known name of the application, if one can be associated
|
||||
* to this ShellApp (it means that the application is using GApplication)
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_DBUS_ID,
|
||||
g_param_spec_string ("dbus-id",
|
||||
"Application DBus Id",
|
||||
"The DBus well-known name of the application",
|
||||
NULL,
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* ShellApp:action-group:
|
||||
*
|
||||
|
@ -41,8 +41,6 @@ const char *shell_app_get_id (ShellApp *app);
|
||||
GMenuTreeEntry *shell_app_get_tree_entry (ShellApp *app);
|
||||
GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);
|
||||
|
||||
const char *shell_app_get_dbus_id (ShellApp *app);
|
||||
|
||||
ClutterActor *shell_app_create_icon_texture (ShellApp *app, int size);
|
||||
ClutterActor *shell_app_get_faded_icon (ShellApp *app, int size);
|
||||
const char *shell_app_get_name (ShellApp *app);
|
||||
|
@ -84,6 +84,7 @@ shell_embedded_window_hide (GtkWidget *widget)
|
||||
{
|
||||
ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (widget);
|
||||
|
||||
if (window->priv->actor)
|
||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
|
||||
|
||||
GTK_WIDGET_CLASS (shell_embedded_window_parent_class)->hide (widget);
|
||||
|
@ -340,104 +340,6 @@ shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
|
||||
|
||||
/* Telepathy utility functions */
|
||||
|
||||
/**
|
||||
* ShellGetTpContactCb:
|
||||
* @connection: The connection
|
||||
* @contacts: (element-type TelepathyGLib.Contact): List of contacts
|
||||
* @failed: Array of failed contacts
|
||||
*/
|
||||
|
||||
static void
|
||||
shell_global_get_tp_contacts_cb (TpConnection *self,
|
||||
guint n_contacts,
|
||||
TpContact * const *contacts,
|
||||
guint n_failed,
|
||||
const TpHandle *failed,
|
||||
const GError *error,
|
||||
gpointer user_data,
|
||||
GObject *weak_object)
|
||||
{
|
||||
int i;
|
||||
GList *contact_list = NULL;
|
||||
for (i = 0; i < n_contacts; i++) {
|
||||
contact_list = g_list_append(contact_list, contacts[i]);
|
||||
}
|
||||
|
||||
TpHandle *failed_list = g_new0 (TpHandle, n_failed + 1);
|
||||
memcpy(failed_list, failed, n_failed);
|
||||
|
||||
((ShellGetTpContactCb)user_data)(self, contact_list, failed_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_tp_contacts:
|
||||
* @self: A connection, which must be ready
|
||||
* @n_handles: Number of handles in handles
|
||||
* @handles: (array length=n_handles) (element-type uint): Array of handles
|
||||
* @n_features: Number of features in features
|
||||
* @features: (array length=n_features) (allow-none) (element-type uint):
|
||||
* Array of features
|
||||
* @callback: (scope async): User callback to run when the contacts are ready
|
||||
*
|
||||
* Wrap tp_connection_get_contacts_by_handle so we can transform the array
|
||||
* into a null-terminated one, which gjs can handle.
|
||||
* We send the original callback to tp_connection_get_contacts_by_handle as
|
||||
* user_data, and we have our own function as callback, which does the
|
||||
* transforming.
|
||||
*/
|
||||
void
|
||||
shell_get_tp_contacts (TpConnection *self,
|
||||
guint n_handles,
|
||||
const TpHandle *handles,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetTpContactCb callback)
|
||||
{
|
||||
tp_connection_get_contacts_by_handle(self, n_handles, handles,
|
||||
n_features, features,
|
||||
shell_global_get_tp_contacts_cb,
|
||||
callback, NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_global_get_self_contact_features_cb (TpConnection *connection,
|
||||
guint n_contacts,
|
||||
TpContact * const *contacts,
|
||||
const GError *error,
|
||||
gpointer user_data,
|
||||
GObject *weak_object)
|
||||
{
|
||||
if (error != NULL) {
|
||||
g_print ("Failed to upgrade self contact: %s", error->message);
|
||||
return;
|
||||
}
|
||||
((ShellGetSelfContactFeaturesCb)user_data)(connection, *contacts);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_self_contact_features:
|
||||
* @self: A connection, which must be ready
|
||||
* @n_features: Number of features in features
|
||||
* @features: (array length=n_features) (allow-none) (element-type uint):
|
||||
* Array of features
|
||||
* @callback: (scope async): User callback to run when the contact is ready
|
||||
*
|
||||
* Wrap tp_connection_upgrade_contacts due to the lack of support for
|
||||
* proper arrays arguments in GJS.
|
||||
*/
|
||||
void
|
||||
shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback)
|
||||
{
|
||||
TpContact *self_contact = tp_connection_get_self_contact (self);
|
||||
|
||||
tp_connection_upgrade_contacts (self, 1, &self_contact,
|
||||
n_features, features,
|
||||
shell_global_get_self_contact_features_cb,
|
||||
callback, NULL, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_contact_events:
|
||||
|
@ -102,24 +102,6 @@ void shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
|
||||
TpConnection *conn);
|
||||
|
||||
/* Telepathy utility functions */
|
||||
typedef void (*ShellGetTpContactCb) (TpConnection *connection,
|
||||
GList *contacts,
|
||||
TpHandle *failed);
|
||||
|
||||
void shell_get_tp_contacts (TpConnection *self,
|
||||
guint n_handles,
|
||||
const TpHandle *handles,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetTpContactCb callback);
|
||||
|
||||
typedef void (*ShellGetSelfContactFeaturesCb) (TpConnection *connection,
|
||||
TpContact *contact);
|
||||
|
||||
void shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback);
|
||||
|
||||
void shell_get_contact_events (TplLogManager *log_manager,
|
||||
TpAccount *account,
|
||||
|
@ -1306,6 +1306,8 @@ st_theme_node_render_resources (StThemeNode *node,
|
||||
StShadow *background_image_shadow_spec;
|
||||
const char *background_image;
|
||||
|
||||
g_return_if_fail (width > 0 && height > 0);
|
||||
|
||||
texture_cache = st_texture_cache_get_default ();
|
||||
|
||||
/* FIXME - need to separate this into things that need to be recomputed on
|
||||
@ -1409,9 +1411,11 @@ st_theme_node_render_resources (StThemeNode *node,
|
||||
else if (node->background_color.alpha > 0 || has_border)
|
||||
{
|
||||
CoglHandle buffer, offscreen;
|
||||
int texture_width = ceil (width);
|
||||
int texture_height = ceil (height);
|
||||
|
||||
buffer = cogl_texture_new_with_size (width,
|
||||
height,
|
||||
buffer = cogl_texture_new_with_size (texture_width,
|
||||
texture_height,
|
||||
COGL_TEXTURE_NO_SLICING,
|
||||
COGL_PIXEL_FORMAT_ANY);
|
||||
offscreen = cogl_offscreen_new_to_texture (buffer);
|
||||
@ -1419,9 +1423,14 @@ st_theme_node_render_resources (StThemeNode *node,
|
||||
if (offscreen != COGL_INVALID_HANDLE)
|
||||
{
|
||||
ClutterActorBox box = { 0, 0, width, height };
|
||||
CoglColor clear_color;
|
||||
|
||||
cogl_push_framebuffer (offscreen);
|
||||
cogl_ortho (0, width, height, 0, 0, 1.0);
|
||||
|
||||
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
|
||||
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
|
||||
|
||||
st_theme_node_paint_borders (node, &box, 0xFF);
|
||||
cogl_pop_framebuffer ();
|
||||
cogl_handle_unref (offscreen);
|
||||
@ -1920,6 +1929,9 @@ st_theme_node_paint (StThemeNode *node,
|
||||
allocation.x2 = width;
|
||||
allocation.y2 = height;
|
||||
|
||||
if (width <= 0 || height <= 0)
|
||||
return;
|
||||
|
||||
if (node->alloc_width != width || node->alloc_height != height)
|
||||
st_theme_node_render_resources (node, width, height);
|
||||
|
||||
|
@ -68,7 +68,7 @@ function main() {
|
||||
section = new Gio.Menu();
|
||||
section.append('Checkbox', 'app.toggle');
|
||||
section.append('Disabled', 'app.disable');
|
||||
menu.append_section(null, section);
|
||||
menu.append_section('Subsection', section);
|
||||
|
||||
// empty sections or submenus should be invisible
|
||||
menu.append_section('Empty section', new Gio.Menu());
|
||||
|
Reference in New Issue
Block a user