Compare commits

...

40 Commits
3.3.3 ... 3.3.4

Author SHA1 Message Date
90a691ed25 Bump version to 3.3.4
Update NEWS
2012-01-20 21:12:39 -05:00
eadb41b3bb Bump dependencies on gtk+ 3.3.9 and glib 2.31.6 2012-01-20 20:46:01 +01:00
6829590c8f dash: improve timing of labels
DashItem labels have initial delay before showing up, but once the
first label in the dash is visible (meaning the user is very likely
exploring things) and the pointer is moved along the dash, the label
will follow immediately.

https://bugzilla.gnome.org/show_bug.cgi?id=666170

Signed-off-by: Seif Lotfy <seif.lotfy@collabora.co.uk>
2012-01-20 20:19:18 +01:00
29da720e6a notificationDaemon: fix order of arguments to _lookupSource()
The order of arguments passed to _lookupSource() was wrong, causing
problems when tray icons were removed.

https://bugzilla.gnome.org/show_bug.cgi?id=664138
2012-01-20 00:03:07 -05:00
c5932c0f07 Adjust to gtk/mutter changes for Application API
https://bugzilla.gnome.org/show_bug.cgi?id=668118
2012-01-18 17:25:35 -05:00
6195386a06 Update iconGrid label style to current mockup
Reference: http://git.gnome.org/browse/gnome-shell-design/plain/mockups/static/overview-application-picker.png

https://bugzilla.gnome.org/show_bug.cgi?id=642392
2012-01-18 19:17:46 +00:00
0080440118 workspaceThumbnail: fix window tracking bugs
- We should only call workspaceRemoved() for workspaces that are
  are actually being removed.
- When we have multiple monitors, a window on a secondary monitor is
  on all workspaces, so it ends up in all workspaces _allWindows
  lists, so we can't use previous presence in that list to determine
  whether we need to go ahead and add the actor; allWindows is simply
  the list of windows where we are listening  to notify::minimized.

https://bugzilla.gnome.org/show_bug.cgi?id=667652
2012-01-18 10:20:53 -05:00
b5be62cd1b ShellApp: Use unique name for menus
Otherwise since the auto-activate flag is set for dbus messages, we
may re-vivify applications that have DBus service files.

https://bugzilla.gnome.org/show_bug.cgi?id=667881
2012-01-17 14:00:51 -05:00
1bac40fbe3 App menu: only create the popup menu with a GMenu
Since the application proxy is created asynchronously, at the time
the GActionGroup (GActionMuxer) is created, there is no GDBusMenu yet.
Defer creating the menu in that case.
Also, clear out signal handlers if have no target application.

https://bugzilla.gnome.org/show_bug.cgi?id=633028
2012-01-17 18:40:04 +01:00
11637bae43 Network Menu: prefer VPN connections when showing the icon
When VPN is active, and it's not the default routing, we should
show the vpn icon, rather than the physical connection.

https://bugzilla.gnome.org/show_bug.cgi?id=665115
2012-01-17 18:24:44 +01:00
301bacec9f workspaceThumbnail: improve handling of notify::minimized signal
There were various cases where we could lose track of a window and
leave the notify::minimized signal connect after the actor was destroyed
or the workspace removed. This could result in operations on a removed
workspace and assertion failures inside Mutter.

https://bugzilla.redhat.com/show_bug.cgi?id=773059
https://bugzilla.gnome.org/show_bug.cgi?id=667652
2012-01-17 10:53:07 -05:00
8943b3b0e9 workspaceThumbnail: disconnect handlers when workspace is removed
We need to remove the handlers when the workspace is removed, not
when the animation of it being removed finishes, or we can access
a destroyed workspace and triggger an assertion failure in Mutter.

https://bugzilla.redhat.com/show_bug.cgi?id=705664
https://bugzilla.gnome.org/show_bug.cgi?id=667652
2012-01-17 10:53:07 -05:00
f59018f2d7 workspaceThumbnail: clear the drop placeholder on pointer leave
We add a drag monitor to check whether the pointer is inside
the workspace selector, and update the visibility of the drop
placeholder consequently.

https://bugzilla.gnome.org/show_bug.cgi?id=664201
2012-01-17 15:45:23 +01:00
235cb9c505 build: Add the 'gl' pkg-config
Cogl does not explicitly link against GL or GLES any more, and Clutter
master dropped the 'gl' pkg-config requirement because it introduced
unneeded and conflicting dependencies.

GNOME Shell still uses glXQuery* API, so it needs to explicitly link
against libGL.

https://bugzilla.gnome.org/show_bug.cgi?id=667864
2012-01-17 13:48:59 +00:00
3f328463a8 Fix timeout callback leaks
Make sure that we don't leak oneshot timeout handlers in main.js and
polkitAuthenticationAgent.js by making the callback return false.

https://bugzilla.gnome.org/show_bug.cgi?id=668087
2012-01-17 12:39:03 +01:00
e58c82fc04 theme-node-drawing: don't crash if st_theme_node_paint() is called on an empty area
When st_theme_node_paint() was called with zero width or height and a theme
node with a shadow, we'd crash because we'd fail to allocate a texture with
an empty size, then unreference the NULL pointer.

https://bugzilla.redhat.com/show_bug.cgi?id=748293
https://bugzilla.gnome.org/show_bug.cgi?id=668050
2012-01-16 17:38:38 -05:00
91ca86ffe4 st-theme-node-drawing: clear border buffer before drawing on it
A new texture has undefined contents - when we're creating a shadow,
we need to clear the contents of the texture before drawing the border
and background into it.

https://bugzilla.gnome.org/show_bug.cgi?id=668048
2012-01-16 17:38:38 -05:00
33d4518e50 hotplug-sniffer: fix double free when setting D-Bus return value
g_dbus_method_invocation_return_value() adopts a floating reference,
so we don't also need to unreference it; fix by replacing the code
using a more compact form using the ^ convenience character in
GVariant type specifications. (Thanks to Ryan Lortie for the
suggestion.)

https://bugzilla.gnome.org/show_bug.cgi?id=667378
2012-01-16 17:38:38 -05:00
b087191d2b RemoteMenu: add support for section labels
According to the GIO docs, sections can have labels too. We support
them by inserting a non reactive menu item at the beginning of the
section. This item is specially flagged to be ignored while processing
changed signals from the model (since it does not correspond to any
model item)

https://bugzilla.gnome.org/show_bug.cgi?id=666681
2012-01-16 19:29:50 +01:00
64baea1693 Workspace: Set a maximum scale for window clones
If there's a single small window (e.g. empathy chat) in the overview, it
looks usable, because it's as big as outside of the overview, but when
you start to type, overview search is launched, which is confusing.

Fix that by setting maximum scale for window clones to 0.7

https://bugzilla.gnome.org/show_bug.cgi?id=646704
2012-01-15 16:25:18 +01:00
b88b743428 Delay rearrangement when cursor hovers a window
In overview when closing a window and afterwards dragging a window it can
happen that you pick a wrong window or no window if windows' positions is
updated while initiating the drag.
Fix that by delaying window rearrangement when cursor is over a window.

https://bugzilla.gnome.org/show_bug.cgi?id=645325
2012-01-15 16:22:53 +01:00
c606cf076d Updated Slovenian translation 2012-01-15 13:46:05 +01:00
d205d7e7c2 Updated Galician translations 2012-01-15 02:34:44 +01:00
efdd3375d0 updated persian translation 2012-01-15 00:42:32 +03:30
abcca3d3bc ShellEmbeddedWindow: don't update the size of a destroyed actor.
shell_embedded_window_hide() can be called during widget destruction,
after the associated ClutterActor has been already cleared out.
Fix a crash in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=633028
2012-01-14 13:31:04 +01:00
f4d13b9801 ShellApp: don't use the app proxy before it's created
The application proxy is created asynchrously after the dbus name
is registed. This means that when tracking the first window (and
therefore creating the first window GActionGroup) there is no
app proxy yet.

https://bugzilla.gnome.org/show_bug.cgi?id=633028
2012-01-14 13:31:04 +01:00
7da39031e1 Place display: don't use a StIcon for DND
DND code assumes it can query the size of the actor before parenting,
while StWidget asserts that get_preferred_size() is only called
after the actor is on stage. This fixes a crash while dragging
"Connect to..."

https://bugzilla.gnome.org/show_bug.cgi?id=633028
2012-01-14 13:31:04 +01:00
6cdb1bd60c telepathyClient: handle ExtendedAway as Away and not Offline
https://bugzilla.gnome.org/show_bug.cgi?id=667813
2012-01-13 11:18:35 +01:00
7c108e267c dbus: fix Screenshot async methods fallout from GDBus migration
With GJS' GDBus implementation, we get the invocation paramters as an
array if we declare a method as async.
This is bad and not consistent with what GJS does for synchronous
methods, but it's the way it is, and other classes in gnome-shell
implement this correctly by exploding the array into its components in
the method implementation, but not the screenshot methods.
Also, we're supposed to return a value using the provided invocation
object, not with a callback now, so do that.

https://bugzilla.gnome.org/show_bug.cgi?id=667662
2012-01-12 15:44:38 -05:00
5cf06fe9a7 telepathyClient: No need to prepare channel contacts
tp-glib does it for us since version 0.15.6

https://bugzilla.gnome.org/show_bug.cgi?id=658817
2012-01-12 20:55:40 +01:00
41f6956197 Fix some fallout from background-size addition
Commit 25948f214e replaced the old hardcoded scaling behavior of
background-images with the CSS-compliant option to control that
behavior with the background-size property. Fix some fallout from
the changed default scaling behavior.
2012-01-10 21:50:21 +01:00
417cbea79c gsettings: Add migration file for overrides
Mutter/Metacity settings overridden by the shell have not been
migrated when moving to GSettings, but there's no good reason not
to migrate those preferences as well.

https://bugzilla.gnome.org/show_bug.cgi?id=667636
2012-01-10 19:40:01 +01:00
225c807550 Updated Finnish translation by Jiri Grönroos. 2012-01-10 09:28:22 +01:00
ff78d2655b Updated Belarusian translation. 2012-01-10 01:19:50 +03:00
bde15f7c61 Updated Bulgarian translation 2012-01-08 10:49:22 +02:00
30300f1aeb Updated Norwegian bokmål translation 2012-01-06 21:18:12 +01:00
d42c3a15d6 Updated Vietnamese translation 2012-01-06 16:36:00 +07:00
14a65559af po/vi: import from Damned Lies 2012-01-06 16:30:38 +07:00
ba1e7bd095 Updated Russian translation 2012-01-05 15:59:24 +04:00
951705a4b2 NEWS: small fixes for 3.3.3 release
Add a couple of missing translators and a missing bug ID from late changes.
2012-01-04 12:46:46 -05:00
37 changed files with 3587 additions and 3287 deletions

53
NEWS
View File

@ -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
=====

View File

@ -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

View File

@ -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 = \

View 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

View File

@ -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;

View File

@ -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();
}

View File

@ -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;
}));
}
}
},

View File

@ -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();
}

View File

@ -332,6 +332,7 @@ function _windowRemoved(workspace, window) {
workspace._lastRemovedWindow = null;
_queueCheckWorkspaces();
}
return false;
});
}

View File

@ -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();
}

View File

@ -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;

View File

@ -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

View File

@ -393,6 +393,7 @@ const AuthenticationAgent = new Lang.Class({
Lang.bind(this,
function() {
this._reallyCompleteRequest(wasDismissed);
return false;
}));
} else {
this._reallyCompleteRequest(wasDismissed);

View File

@ -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;

View File

@ -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() {

View File

@ -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) {

View File

@ -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) {

View File

@ -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;
},

View File

@ -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;
},

View File

@ -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++;
}

706
po/be.po

File diff suppressed because it is too large Load Diff

664
po/bg.po

File diff suppressed because it is too large Load Diff

778
po/fa.po

File diff suppressed because it is too large Load Diff

771
po/fi.po

File diff suppressed because it is too large Load Diff

792
po/gl.po

File diff suppressed because it is too large Load Diff

399
po/nb.po
View File

@ -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»"

815
po/ru.po

File diff suppressed because it is too large Load Diff

333
po/sl.po
View File

@ -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"

740
po/vi.po

File diff suppressed because it is too large Load Diff

View File

@ -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:

View File

@ -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:
*

View File

@ -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);

View File

@ -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);

View File

@ -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:

View File

@ -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,

View File

@ -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);

View File

@ -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());