diff --git a/.gitignore b/.gitignore index 7b96e58..0455c8e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/gnome-shell-extensions-3.8.4.tar.xz +SOURCES/gnome-shell-extensions-3.14.4.tar.xz diff --git a/.gnome-shell-extensions.metadata b/.gnome-shell-extensions.metadata index 42fb38c..8cb9112 100644 --- a/.gnome-shell-extensions.metadata +++ b/.gnome-shell-extensions.metadata @@ -1 +1 @@ -e36c854b8bb9a8206b15b37a9a2836520086a46d SOURCES/gnome-shell-extensions-3.8.4.tar.xz +2f07cff9dfa756a6e16c3ac58b9ceb2fb229c022 SOURCES/gnome-shell-extensions-3.14.4.tar.xz diff --git a/SOURCES/0001-Use-a-proper-arrows-instead-of-UTF8.patch b/SOURCES/0001-Use-a-proper-arrows-instead-of-UTF8.patch new file mode 100644 index 0000000..fe08007 --- /dev/null +++ b/SOURCES/0001-Use-a-proper-arrows-instead-of-UTF8.patch @@ -0,0 +1,47 @@ +From 271f4dee47e19e3e0f3f7c6a8cf49e41044899a1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Mon, 9 Mar 2015 20:58:43 +0100 +Subject: [PATCH] Use a proper arrows instead of UTF8 + +All proper shell menus were updated to do that a while ago, we +should do the same for consistency. + +https://bugzilla.gnome.org/show_bug.cgi?id=745909 +--- + extensions/drive-menu/extension.js | 4 +--- + extensions/places-menu/extension.js | 4 +--- + 2 files changed, 2 insertions(+), 6 deletions(-) + +diff --git a/extensions/drive-menu/extension.js b/extensions/drive-menu/extension.js +index fe42a4c..8d22987 100644 +--- a/extensions/drive-menu/extension.js ++++ b/extensions/drive-menu/extension.js +@@ -128,9 +128,7 @@ const DriveMenu = new Lang.Class({ + style_class: 'system-status-icon' }); + + hbox.add_child(icon); +- hbox.add_child(new St.Label({ text: '\u25BE', +- y_expand: true, +- y_align: Clutter.ActorAlign.CENTER })); ++ hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); + this.actor.add_child(hbox); + + this._monitor = Gio.VolumeMonitor.get(); +diff --git a/extensions/places-menu/extension.js b/extensions/places-menu/extension.js +index a8660c8..767fb87 100644 +--- a/extensions/places-menu/extension.js ++++ b/extensions/places-menu/extension.js +@@ -82,9 +82,7 @@ const PlacesMenu = new Lang.Class({ + y_expand: true, + y_align: Clutter.ActorAlign.CENTER }); + hbox.add_child(label); +- hbox.add_child(new St.Label({ text: '\u25BE', +- y_expand: true, +- y_align: Clutter.ActorAlign.CENTER })); ++ hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); + this.actor.add_actor(hbox); + + this.placesManager = new PlaceDisplay.PlacesManager(); +-- +2.3.6 + diff --git a/SOURCES/0001-apps-menu-Fix-call-to-open_new_window.patch b/SOURCES/0001-apps-menu-Fix-call-to-open_new_window.patch new file mode 100644 index 0000000..fd00f7f --- /dev/null +++ b/SOURCES/0001-apps-menu-Fix-call-to-open_new_window.patch @@ -0,0 +1,28 @@ +From 3051fbc5dd204cc6dade56b9d395a4cfc3bcd698 Mon Sep 17 00:00:00 2001 +From: Siteshwar Vashisht +Date: Tue, 9 Jun 2015 17:43:20 +0530 +Subject: [PATCH] apps-menu: Fix call to open_new_window() + +The function never had a timestamp parameter, the parameter that was +added at some point is a workspace index. Ouch, this has gone unspotted +since the original AxeMenu extension was adapted for the apps-menu ... +--- + extensions/apps-menu/extension.js | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js +index f8438fd..5ac4e8e 100644 +--- a/extensions/apps-menu/extension.js ++++ b/extensions/apps-menu/extension.js +@@ -74,7 +74,7 @@ const ApplicationMenuItem = new Lang.Class({ + }, + + activate: function(event) { +- this._app.open_new_window(event.get_time()); ++ this._app.open_new_window(-1); + this._button.selectCategory(null, null); + this._button.menu.toggle(); + this.parent(event); +-- +2.4.3 + diff --git a/SOURCES/0001-apps-menu-add-logo-icon-to-Applications-menu.patch b/SOURCES/0001-apps-menu-add-logo-icon-to-Applications-menu.patch index 5bd889f..83d3ccf 100644 --- a/SOURCES/0001-apps-menu-add-logo-icon-to-Applications-menu.patch +++ b/SOURCES/0001-apps-menu-add-logo-icon-to-Applications-menu.patch @@ -1,18 +1,18 @@ -From d9837ecc12258ee93a7cbf4ce8b8c09b77a44f5d Mon Sep 17 00:00:00 2001 +From 6d8c4482fe9f423dceb9671958ed388778ff62a8 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 21 Jan 2014 16:48:17 -0500 Subject: [PATCH] apps-menu: add logo icon to Applications menu Brand requested it. --- - extensions/apps-menu/extension.js | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) + extensions/apps-menu/extension.js | 6 ++++++ + 1 file changed, 6 insertions(+) diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js -index cef443d..1de1c70 100644 +index f8438fd..2d198c1 100644 --- a/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js -@@ -1,33 +1,34 @@ +@@ -1,6 +1,7 @@ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ const Atk = imports.gi.Atk; @@ -20,105 +20,18 @@ index cef443d..1de1c70 100644 const GMenu = imports.gi.GMenu; const Lang = imports.lang; const Shell = imports.gi.Shell; - const St = imports.gi.St; - const Clutter = imports.gi.Clutter; - const Main = imports.ui.main; - const PanelMenu = imports.ui.panelMenu; - const PopupMenu = imports.ui.popupMenu; - const Gtk = imports.gi.Gtk; - const GLib = imports.gi.GLib; - const Signals = imports.signals; - const Layout = imports.ui.layout; - const Pango = imports.gi.Pango; +@@ -280,6 +281,11 @@ const ApplicationsButton = new Lang.Class({ - const Gettext = imports.gettext.domain('gnome-shell-extensions'); - const _ = Gettext.gettext; + let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); - const ExtensionUtils = imports.misc.extensionUtils; - const Me = ExtensionUtils.getCurrentExtension(); - const Convenience = Me.imports.convenience; - - const appSys = Shell.AppSystem.get_default(); - - const APPLICATION_ICON_SIZE = 32; - const HORIZ_FACTOR = 5; - const MENU_HEIGHT_OFFSET = 132; - const NAVIGATION_REGION_OVERSHOOT = 50; - - const ActivitiesMenuItem = new Lang.Class({ - Name: 'ActivitiesMenuItem', -@@ -246,63 +247,70 @@ const ApplicationsMenu = new Lang.Class({ - this._button.hotCorner.actor.show(); - this.parent(animate); - }, - - toggle: function() { - if (this.isOpen) { - this._button.selectCategory(null, null); - } else { - if (Main.overview.visible) - Main.overview.hide(); - } - this.parent(); - } - }); - - const ApplicationsButton = new Lang.Class({ - Name: 'ApplicationsButton', - Extends: PanelMenu.Button, - - _init: function() { - this.parent(1.0, null, false); - - this.setMenu(new ApplicationsMenu(this.actor, 1.0, St.Side.TOP, this)); - Main.panel.menuManager.addMenu(this.menu); - - // At this moment applications menu is not keyboard navigable at - // all (so not accessible), so it doesn't make sense to set as - // role ATK_ROLE_MENU like other elements of the panel. - this.actor.accessible_role = Atk.Role.LABEL; - -+ let box = new St.BoxLayout(); -+ this.actor.add_actor(box); + let iconFile = Gio.File.new_for_path('/usr/share/icons/hicolor/scalable/apps/start-here.svg'); + this._icon = new St.Icon({ gicon: new Gio.FileIcon({ file: iconFile }), + style_class: 'panel-logo-icon' }); -+ box.add_actor(this._icon); ++ hbox.add_actor(this._icon); + - this._label = new St.Label({ text: _("Applications") }); - -- this.actor.add_actor(this._label); -+ box.add_actor(this._label); - this.actor.name = 'panelApplications'; - this.actor.label_actor = this._label; - - this.actor.connect('captured-event', Lang.bind(this, this._onCapturedEvent)); - - _showingId = Main.overview.connect('showing', Lang.bind(this, function() { - this.actor.add_accessible_state (Atk.StateType.CHECKED); - })); - _hidingId = Main.overview.connect('hiding', Lang.bind(this, function() { - this.actor.remove_accessible_state (Atk.StateType.CHECKED); - })); - - this.reloadFlag = false; - this._createLayout(); - this._display(); - _installedChangedId = appSys.connect('installed-changed', Lang.bind(this, function() { - if (this.menu.isOpen) { - this._redisplay(); - this.mainBox.show(); - } else { - this.reloadFlag = true; - } - })); - - // Since the hot corner uses stage coordinates, Clutter won't - // queue relayouts for us when the panel moves. Queue a relayout - // when that happens. - _panelBoxChangedId = Main.layoutManager.connect('panel-box-changed', Lang.bind(this, function() { - container.queue_relayout(); - })); + this._label = new St.Label({ text: _("Applications"), + y_expand: true, + y_align: Clutter.ActorAlign.CENTER }); -- -1.8.3.1 +2.3.3 diff --git a/SOURCES/0001-data-set-shell-classic-mode-via-env-variable-instead.patch b/SOURCES/0001-data-set-shell-classic-mode-via-env-variable-instead.patch deleted file mode 100644 index 4263422..0000000 --- a/SOURCES/0001-data-set-shell-classic-mode-via-env-variable-instead.patch +++ /dev/null @@ -1,57 +0,0 @@ -From dc3162d24b372705cea7697624bfd04cee376997 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 7 Jan 2014 13:41:28 -0500 -Subject: [PATCH] data: set shell classic mode via env variable instead of - command line - -Currently, we start gnome-shell in classic mode by passing ---mode=classic to the gnome-shell command line. This --mode=classic -gets stripped away when the session is saved, which breaks classic -mode on subsequent login attempts. - -This commit changes the session file to set the -GNOME_SHELL_SESSION_MODE environment variable instead. ---- - data/gnome-classic.desktop.in | 2 +- - data/gnome-shell-classic.desktop.in.in | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/data/gnome-classic.desktop.in b/data/gnome-classic.desktop.in -index b3ab3af..27ae219 100644 ---- a/data/gnome-classic.desktop.in -+++ b/data/gnome-classic.desktop.in -@@ -1,7 +1,7 @@ - [Desktop Entry] - _Name=GNOME Classic - _Comment=This session logs you into GNOME Classic --Exec=gnome-session --session gnome-classic -+Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic - TryExec=gnome-session - Icon= - Type=Application -diff --git a/data/gnome-shell-classic.desktop.in.in b/data/gnome-shell-classic.desktop.in.in -index 6de19fe..76fdf21 100644 ---- a/data/gnome-shell-classic.desktop.in.in -+++ b/data/gnome-shell-classic.desktop.in.in -@@ -1,17 +1,17 @@ - [Desktop Entry] - Type=Application - _Name=GNOME Shell Classic - _Comment=Window management and application launching --Exec=@bindir@/gnome-shell --mode=classic -+Exec=@bindir@/gnome-shell - TryExec=@bindir@/gnome-shell - X-GNOME-Bugzilla-Bugzilla=GNOME - X-GNOME-Bugzilla-Product=gnome-shell - X-GNOME-Bugzilla-Component=general - X-GNOME-Bugzilla-Version=@VERSION@ - Categories=GNOME;GTK;Core; - OnlyShowIn=GNOME; - NoDisplay=true - X-GNOME-Autostart-Phase=WindowManager - X-GNOME-Provides=panel;windowmanager; - X-GNOME-Autostart-Notify=true - X-GNOME-AutoRestart=false --- -1.8.3.1 - diff --git a/SOURCES/0001-window-list-Add-context-menu.patch b/SOURCES/0001-window-list-Add-context-menu.patch deleted file mode 100644 index 7786af1..0000000 --- a/SOURCES/0001-window-list-Add-context-menu.patch +++ /dev/null @@ -1,359 +0,0 @@ -From 1155edadcd514ce053beab5e258df13fd2a79dd1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Mon, 27 May 2013 23:41:56 +0200 -Subject: [PATCH 1/2] window-list: Add context menu - -gnome-panel's window list had context menus on buttons, that gave -easy access to common operations like close, minimize and maximize. -Add something similar to the window-list. - -https://bugzilla.gnome.org/show_bug.cgi?id=699251 ---- - extensions/window-list/extension.js | 255 ++++++++++++++++++++++++++++++++---- - 1 file changed, 232 insertions(+), 23 deletions(-) - -diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js -index 1c46791..7a9d392 100644 ---- a/extensions/window-list/extension.js -+++ b/extensions/window-list/extension.js -@@ -37,6 +37,85 @@ function _minimizeOrActivateWindow(window) { - window.activate(global.get_current_time()); - } - -+function _openMenu(menu) { -+ menu.open(); -+ -+ let event = Clutter.get_current_event(); -+ if (event && event.type() == Clutter.EventType.KEY_RELEASE) -+ menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); -+} -+ -+ -+const WindowContextMenu = new Lang.Class({ -+ Name: 'WindowContextMenu', -+ Extends: PopupMenu.PopupMenu, -+ -+ _init: function(source, metaWindow) { -+ this.parent(source, 0.5, St.Side.BOTTOM); -+ -+ this._metaWindow = metaWindow; -+ -+ this._minimizeItem = new PopupMenu.PopupMenuItem(''); -+ this._minimizeItem.connect('activate', Lang.bind(this, function() { -+ if (this._metaWindow.minimized) -+ this._metaWindow.unminimize(); -+ else -+ this._metaWindow.minimize(); -+ })); -+ this.addMenuItem(this._minimizeItem); -+ -+ this._notifyMinimizedId = -+ this._metaWindow.connect('notify::minimized', -+ Lang.bind(this, this._updateMinimizeItem)); -+ this._updateMinimizeItem(); -+ -+ this._maximizeItem = new PopupMenu.PopupMenuItem(''); -+ this._maximizeItem.connect('activate', Lang.bind(this, function() { -+ if (this._metaWindow.maximized_vertically && -+ this._metaWindow.maximized_horizontally) -+ this._metaWindow.unmaximize(Meta.MaximizeFlags.HORIZONTAL | -+ Meta.MaximizeFlags.VERTICAL); -+ else -+ this._metaWindow.maximize(Meta.MaximizeFlags.HORIZONTAL | -+ Meta.MaximizeFlags.VERTICAL); -+ })); -+ this.addMenuItem(this._maximizeItem); -+ -+ this._notifyMaximizedHId = -+ this._metaWindow.connect('notify::maximized-horizontally', -+ Lang.bind(this, this._updateMaximizeItem)); -+ this._notifyMaximizedVId = -+ this._metaWindow.connect('notify::maximized-vertically', -+ Lang.bind(this, this._updateMaximizeItem)); -+ this._updateMaximizeItem(); -+ -+ let item = new PopupMenu.PopupMenuItem(_("Close")); -+ item.connect('activate', Lang.bind(this, function() { -+ this._metaWindow.delete(global.get_current_time()); -+ })); -+ this.addMenuItem(item); -+ -+ this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); -+ }, -+ -+ _updateMinimizeItem: function() { -+ this._minimizeItem.label.text = this._metaWindow.minimized ? _("Unminimize") -+ : _("Minimize"); -+ }, -+ -+ _updateMaximizeItem: function() { -+ let maximized = this._metaWindow.maximized_vertically && -+ this._metaWindow.maximized_horizontally; -+ this._maximizeItem.label.text = maximized ? _("Unmaximize") -+ : _("Maximize"); -+ }, -+ -+ _onDestroy: function() { -+ this._metaWindow.disconnect(this._notifyMinimizedId); -+ this._metaWindow.disconnect(this._notifyMaximizedHId); -+ this._metaWindow.disconnect(this._notifyMaximizedVId); -+ } -+}); - - const WindowTitle = new Lang.Class({ - Name: 'WindowTitle', -@@ -99,13 +178,22 @@ const WindowButton = new Lang.Class({ - this.actor = new St.Button({ style_class: 'window-button', - x_fill: true, - can_focus: true, -+ button_mask: St.ButtonMask.ONE | -+ St.ButtonMask.THREE, - child: this._windowTitle.actor }); - this.actor._delegate = this; - -+ this._menuManager = new PopupMenu.PopupMenuManager(this); -+ this._contextMenu = new WindowContextMenu(this.actor, this.metaWindow); -+ this._contextMenu.actor.hide(); -+ this._menuManager.addMenu(this._contextMenu); -+ Main.uiGroup.add_actor(this._contextMenu.actor); -+ - this.actor.connect('allocation-changed', - Lang.bind(this, this._updateIconGeometry)); - this.actor.connect('clicked', Lang.bind(this, this._onClicked)); - this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); -+ this.actor.connect('popup-menu', Lang.bind(this, this._onPopupMenu)); - - this._switchWorkspaceId = - global.window_manager.connect('switch-workspace', -@@ -118,8 +206,22 @@ const WindowButton = new Lang.Class({ - this._updateStyle(); - }, - -- _onClicked: function() { -- _minimizeOrActivateWindow(this.metaWindow); -+ _onClicked: function(actor, button) { -+ if (this._contextMenu.isOpen) { -+ this._contextMenu.close(); -+ return; -+ } -+ -+ if (button == 1) -+ _minimizeOrActivateWindow(this.metaWindow); -+ else -+ _openMenu(this._contextMenu); -+ }, -+ -+ _onPopupMenu: function(actor) { -+ if (this._contextMenu.isOpen) -+ return; -+ _openMenu(this._contextMenu); - }, - - _updateStyle: function() { -@@ -151,10 +253,82 @@ const WindowButton = new Lang.Class({ - _onDestroy: function() { - global.window_manager.disconnect(this._switchWorkspaceId); - global.display.disconnect(this._notifyFocusId); -+ this._contextMenu.actor.destroy(); - } - }); - - -+const AppContextMenu = new Lang.Class({ -+ Name: 'AppContextMenu', -+ Extends: PopupMenu.PopupMenu, -+ -+ _init: function(source, app) { -+ this.parent(source, 0.5, St.Side.BOTTOM); -+ -+ this._app = app; -+ -+ this._minimizeItem = new PopupMenu.PopupMenuItem(_("Minimize all")); -+ this._minimizeItem.connect('activate', Lang.bind(this, function() { -+ this._app.get_windows().forEach(function(w) { -+ w.minimize(); -+ }); -+ })); -+ this.addMenuItem(this._minimizeItem); -+ -+ this._unminimizeItem = new PopupMenu.PopupMenuItem(_("Unminimize all")); -+ this._unminimizeItem.connect('activate', Lang.bind(this, function() { -+ this._app.get_windows().forEach(function(w) { -+ w.unminimize(); -+ }); -+ })); -+ this.addMenuItem(this._unminimizeItem); -+ -+ this._maximizeItem = new PopupMenu.PopupMenuItem(_("Maximize all")); -+ this._maximizeItem.connect('activate', Lang.bind(this, function() { -+ this._app.get_windows().forEach(function(w) { -+ w.maximize(Meta.MaximizeFlags.HORIZONTAL | -+ Meta.MaximizeFlags.VERTICAL); -+ }); -+ })); -+ this.addMenuItem(this._maximizeItem); -+ -+ this._unmaximizeItem = new PopupMenu.PopupMenuItem(_("Unmaximize all")); -+ this._unmaximizeItem.connect('activate', Lang.bind(this, function() { -+ this._app.get_windows().forEach(function(w) { -+ w.unmaximize(Meta.MaximizeFlags.HORIZONTAL | -+ Meta.MaximizeFlags.VERTICAL); -+ }); -+ })); -+ this.addMenuItem(this._unmaximizeItem); -+ -+ let item = new PopupMenu.PopupMenuItem(_("Close all")); -+ item.connect('activate', Lang.bind(this, function() { -+ this._app.get_windows().forEach(function(w) { -+ w.delete(global.get_current_time()); -+ }); -+ })); -+ this.addMenuItem(item); -+ }, -+ -+ open: function(animate) { -+ let windows = this._app.get_windows(); -+ this._minimizeItem.actor.visible = windows.some(function(w) { -+ return !w.minimized; -+ }); -+ this._unminimizeItem.actor.visible = windows.some(function(w) { -+ return w.minimized; -+ }); -+ this._maximizeItem.actor.visible = windows.some(function(w) { -+ return !(w.maximized_horizontally && w.maximized_vertically); -+ }); -+ this._unmaximizeItem.actor.visible = windows.some(function(w) { -+ return w.maximized_horizontally && w.maximized_vertically; -+ }); -+ -+ this.parent(animate); -+ } -+}); -+ - const AppButton = new Lang.Class({ - Name: 'AppButton', - -@@ -165,6 +339,8 @@ const AppButton = new Lang.Class({ - this.actor = new St.Button({ style_class: 'window-button', - x_fill: true, - can_focus: true, -+ button_mask: St.ButtonMask.ONE | -+ St.ButtonMask.THREE, - child: stack }); - this.actor._delegate = this; - -@@ -190,6 +366,12 @@ const AppButton = new Lang.Class({ - this._menuManager.addMenu(this._menu); - Main.uiGroup.add_actor(this._menu.actor); - -+ this._contextMenuManager = new PopupMenu.PopupMenuManager(this); -+ this._appContextMenu = new AppContextMenu(this.actor, this.app); -+ this._appContextMenu.actor.hide(); -+ this._contextMenuManager.addMenu(this._appContextMenu); -+ Main.uiGroup.add_actor(this._appContextMenu.actor); -+ - this._textureCache = St.TextureCache.get_default(); - this._iconThemeChangedId = - this._textureCache.connect('icon-theme-changed', Lang.bind(this, -@@ -198,6 +380,7 @@ const AppButton = new Lang.Class({ - })); - this.actor.connect('clicked', Lang.bind(this, this._onClicked)); - this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); -+ this.actor.connect('popup-menu', Lang.bind(this, this._onPopupMenu)); - - this._switchWorkspaceId = - global.window_manager.connect('switch-workspace', -@@ -258,43 +441,69 @@ const AppButton = new Lang.Class({ - this.metaWindow = windows[0]; - this._windowTitle = new WindowTitle(this.metaWindow); - this._singleWindowTitle.child = this._windowTitle.actor; -+ this._windowContextMenu = new WindowContextMenu(this.actor, this.metaWindow); -+ Main.uiGroup.add_actor(this._windowContextMenu.actor); -+ this._windowContextMenu.actor.hide(); -+ this._contextMenuManager.addMenu(this._windowContextMenu); - } -+ this._contextMenu = this._windowContextMenu; - } else { - if (this._windowTitle) { - this.metaWindow = null; - this._singleWindowTitle.child = null; - this._windowTitle = null; -+ this._windowContextMenu.actor.destroy(); -+ this._windowContextMenu = null; - } -+ this._contextMenu = this._appContextMenu; - } -+ - }, - -- _onClicked: function() { -- if (this._menu.isOpen) { -+ _onClicked: function(actor, button) { -+ let menuWasOpen = this._menu.isOpen; -+ if (menuWasOpen) - this._menu.close(); -- return; -- } - -- let windows = this._getWindowList(); -- if (windows.length == 1) { -- _minimizeOrActivateWindow(windows[0]); -- } else { -- this._menu.removeAll(); -- -- for (let i = 0; i < windows.length; i++) { -- let windowTitle = new WindowTitle(windows[i]); -- let item = new PopupMenu.PopupBaseMenuItem(); -- item.addActor(windowTitle.actor); -- item._window = windows[i]; -- this._menu.addMenuItem(item); -- } -- this._menu.open(); -+ let contextMenuWasOpen = this._contextMenu.isOpen; -+ if (contextMenuWasOpen) -+ this._contextMenu.close(); -+ -+ if (button == 1) { -+ if (menuWasOpen) -+ return; - -- let event = Clutter.get_current_event(); -- if (event && event.type() == Clutter.EventType.KEY_RELEASE) -- this._menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); -+ let windows = this._getWindowList(); -+ if (windows.length == 1) { -+ if (contextMenuWasOpen) -+ return; -+ _minimizeOrActivateWindow(windows[0]); -+ } else { -+ this._menu.removeAll(); -+ -+ for (let i = 0; i < windows.length; i++) { -+ let windowTitle = new WindowTitle(windows[i]); -+ let item = new PopupMenu.PopupBaseMenuItem(); -+ item.addActor(windowTitle.actor); -+ item._window = windows[i]; -+ this._menu.addMenuItem(item); -+ } -+ _openMenu(this._menu); -+ } -+ } else { -+ if (contextMenuWasOpen) -+ return; -+ _openMenu(this._contextMenu); - } - }, - -+ _onPopupMenu: function(actor) { -+ if (this._menu.isOpen || this._contextMenu.isOpen) -+ return; -+ _openMenu(this._contextMenu); -+ }, -+ -+ - _onMenuActivate: function(menu, child) { - child._window.activate(global.get_current_time()); - }, --- -1.8.3.1 - diff --git a/SOURCES/0001-window-list-Don-t-consider-skip-taskbar-windows-for-.patch b/SOURCES/0001-window-list-Don-t-consider-skip-taskbar-windows-for-.patch new file mode 100644 index 0000000..9a6c4db --- /dev/null +++ b/SOURCES/0001-window-list-Don-t-consider-skip-taskbar-windows-for-.patch @@ -0,0 +1,33 @@ +From cda4c58cfa094c44fe939f050ef1113fdd88c8ba Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 30 Jul 2015 14:45:58 +0200 +Subject: [PATCH] window-list: Don't consider skip-taskbar windows for app + sorting + +It is odd to consider windows that are not shown in the window list +for app sorting, in particular when switching between grouped and +ungrouped mode, and when a long-lived window like the DESKTOP is +present. + +https://bugzilla.gnome.org/show_bug.cgi?id=753055 +--- + extensions/window-list/extension.js | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 28feda6..f37c850 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -58,7 +58,8 @@ function _onMenuStateChanged(menu, isOpen) { + } + + function _getAppStableSequence(app) { +- return app.get_windows().reduce(function(prev, cur) { ++ let windows = app.get_windows().filter(function(w) { return !w.skip_taskbar; }); ++ return windows.reduce(function(prev, cur) { + return Math.min(prev, cur.get_stable_sequence()); + }, Infinity); + } +-- +2.4.3 + diff --git a/SOURCES/0001-workspace-indicator-Use-consistent-workspace-numberi.patch b/SOURCES/0001-workspace-indicator-Use-consistent-workspace-numberi.patch new file mode 100644 index 0000000..91bc42a --- /dev/null +++ b/SOURCES/0001-workspace-indicator-Use-consistent-workspace-numberi.patch @@ -0,0 +1,30 @@ +From d44d9983cc506df397baeb595109e215578bebbc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 31 Jul 2015 16:37:48 +0200 +Subject: [PATCH] workspace-indicator: Use consistent workspace numbering + +The indicator numbers workspaces starting from 1, while newly added +workspace names in the preference dialog start counting at 0. +Change the latter to be consistent with the indicator. + +https://bugzilla.gnome.org/show_bug.cgi?id=753105 +--- + extensions/workspace-indicator/prefs.js | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/extensions/workspace-indicator/prefs.js b/extensions/workspace-indicator/prefs.js +index 49378c4..e5dbebe 100644 +--- a/extensions/workspace-indicator/prefs.js ++++ b/extensions/workspace-indicator/prefs.js +@@ -195,7 +195,7 @@ const WorkspaceSettingsWidget = new GObject.Class({ + let iter = this._store.append(); + let index = this._store.get_path(iter).get_indices()[0]; + +- let label = _("Workspace %d").format(index); ++ let label = _("Workspace %d").format(index + 1); + this._store.set(iter, [this._store.Columns.LABEL], [label]); + }, + +-- +2.4.3 + diff --git a/SOURCES/0002-apps-menu-Respect-user-s-favorite-apps-order.patch b/SOURCES/0002-apps-menu-Respect-user-s-favorite-apps-order.patch deleted file mode 100644 index 5062da5..0000000 --- a/SOURCES/0002-apps-menu-Respect-user-s-favorite-apps-order.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 4446263190a6260903aa93ffe7e698df6346f4a9 Mon Sep 17 00:00:00 2001 -From: Jiro Matsuzawa -Date: Tue, 27 Aug 2013 10:13:40 +0900 -Subject: [PATCH 2/2] apps-menu: Respect user's favorite apps order - -https://bugzilla.gnome.org/show_bug.cgi?id=704248 ---- - extensions/apps-menu/extension.js | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js -index a822d44..cef443d 100644 ---- a/extensions/apps-menu/extension.js -+++ b/extensions/apps-menu/extension.js -@@ -540,6 +540,9 @@ const ApplicationsButton = new Lang.Class({ - - if (category_menu_id) { - applist = this.applicationsByCategory[category_menu_id]; -+ applist.sort(function(a,b) { -+ return a.get_name().toLowerCase() > b.get_name().toLowerCase(); -+ }); - } else { - applist = new Array(); - let favorites = global.settings.get_strv('favorite-apps'); -@@ -550,9 +553,6 @@ const ApplicationsButton = new Lang.Class({ - } - } - -- applist.sort(function(a,b) { -- return a.get_name().toLowerCase() > b.get_name().toLowerCase(); -- }); - return applist; - }, - --- -1.8.3.1 - diff --git a/SOURCES/add-extra-extensions.patch b/SOURCES/add-extra-extensions.patch new file mode 100644 index 0000000..e6dfcf3 --- /dev/null +++ b/SOURCES/add-extra-extensions.patch @@ -0,0 +1,9723 @@ +From 3743256a1975c911f07043f20e1ff861ad14b7b3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 May 2015 17:44:50 +0200 +Subject: [PATCH 1/3] Add top-icons extension + +--- + configure.ac | 5 +- + extensions/top-icons/Makefile.am | 3 + + extensions/top-icons/extension.js | 192 ++++++++++++++++++++++++++++++++++ + extensions/top-icons/metadata.json.in | 10 ++ + extensions/top-icons/stylesheet.css | 1 + + 5 files changed, 209 insertions(+), 2 deletions(-) + create mode 100644 extensions/top-icons/Makefile.am + create mode 100644 extensions/top-icons/extension.js + create mode 100644 extensions/top-icons/metadata.json.in + create mode 100644 extensions/top-icons/stylesheet.css + +diff --git a/configure.ac b/configure.ac +index 6b95674..90b54da 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -29,7 +29,7 @@ AC_SUBST([SHELL_VERSION]) + dnl keep this in alphabetic order + CLASSIC_EXTENSIONS="apps-menu places-menu alternate-tab launch-new-instance window-list" + DEFAULT_EXTENSIONS="$CLASSIC_EXTENSIONS drive-menu screenshot-window-sizer windowsNavigator workspace-indicator" +-ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows example native-window-placement systemMonitor user-theme" ++ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows example native-window-placement systemMonitor top-icons user-theme" + AC_SUBST(CLASSIC_EXTENSIONS, [$CLASSIC_EXTENSIONS]) + AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS]) + AC_ARG_ENABLE([extensions], +@@ -66,7 +66,7 @@ for e in $enable_extensions; do + [AC_MSG_WARN([libgtop-2.0 not found, disabling systemMonitor])]) + ;; + dnl keep this in alphabetic order +- alternate-tab|apps-menu|auto-move-windows|drive-menu|example|launch-new-instance|native-window-placement|places-menu|screenshot-window-sizer|user-theme|window-list|windowsNavigator|workspace-indicator) ++ alternate-tab|apps-menu|auto-move-windows|drive-menu|example|launch-new-instance|native-window-placement|places-menu|screenshot-window-sizer|top-icons|user-theme|window-list|windowsNavigator|workspace-indicator) + ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e" + ;; + *) +@@ -89,6 +89,7 @@ AC_CONFIG_FILES([ + extensions/places-menu/Makefile + extensions/screenshot-window-sizer/Makefile + extensions/systemMonitor/Makefile ++ extensions/top-icons/Makefile + extensions/user-theme/Makefile + extensions/window-list/Makefile + extensions/windowsNavigator/Makefile +diff --git a/extensions/top-icons/Makefile.am b/extensions/top-icons/Makefile.am +new file mode 100644 +index 0000000..4650164 +--- /dev/null ++++ b/extensions/top-icons/Makefile.am +@@ -0,0 +1,3 @@ ++EXTENSION_ID = top-icons ++ ++include ../../extension.mk +diff --git a/extensions/top-icons/extension.js b/extensions/top-icons/extension.js +new file mode 100644 +index 0000000..97f8c78 +--- /dev/null ++++ b/extensions/top-icons/extension.js +@@ -0,0 +1,192 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Clutter = imports.gi.Clutter; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++const Main = imports.ui.main; ++const GLib = imports.gi.GLib; ++const Lang = imports.lang; ++const Panel = imports.ui.panel; ++const PanelMenu = imports.ui.panelMenu; ++const Meta = imports.gi.Meta; ++const Mainloop = imports.mainloop; ++const NotificationDaemon = imports.ui.notificationDaemon; ++ ++let trayAddedId = 0; ++let trayRemovedId = 0; ++let getSource = null; ++let icons = []; ++let notificationDaemon; ++ ++function init() { ++ if (Main.legacyTray) { ++ notificationDaemon = Main.legacyTray; ++ NotificationDaemon.STANDARD_TRAY_ICON_IMPLEMENTATIONS = imports.ui.legacyTray.STANDARD_TRAY_ICON_IMPLEMENTATIONS; ++ } ++ else if (Main.notificationDaemon._fdoNotificationDaemon) { ++ notificationDaemon = Main.notificationDaemon._fdoNotificationDaemon; ++ getSource = Lang.bind(notificationDaemon, NotificationDaemon.FdoNotificationDaemon.prototype._getSource); ++ } ++ else { ++ notificationDaemon = Main.notificationDaemon; ++ getSource = Lang.bind(notificationDaemon, NotificationDaemon.NotificationDaemon.prototype._getSource); ++ } ++} ++ ++function enable() { ++ GLib.idle_add(GLib.PRIORITY_LOW, moveToTop); ++} ++ ++function createSource (title, pid, ndata, sender, trayIcon) { ++ if (trayIcon) { ++ onTrayIconAdded(this, trayIcon, title); ++ return null; ++ } ++ ++ return getSource(title, pid, ndata, sender, trayIcon); ++}; ++ ++function onTrayIconAdded(o, icon, role) { ++ let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : ''; ++ if (NotificationDaemon.STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass] !== undefined) ++ return; ++ ++ let buttonBox = new PanelMenu.ButtonBox(); ++ let box = buttonBox.actor; ++ let parent = box.get_parent(); ++ ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let iconSize = Panel.PANEL_ICON_SIZE * scaleFactor; ++ ++ icon.set_size(iconSize, iconSize); ++ box.add_actor(icon); ++ ++ icon.reactive = true; ++ ++ if (parent) ++ parent.remove_actor(box); ++ ++ icons.push(icon); ++ Main.panel._rightBox.insert_child_at_index(box, 0); ++ ++ let clickProxy = new St.Bin({ width: iconSize, height: iconSize }); ++ clickProxy.reactive = true; ++ Main.uiGroup.add_actor(clickProxy); ++ ++ icon._proxyAlloc = Main.panel._rightBox.connect('allocation-changed', function() { ++ Meta.later_add(Meta.LaterType.BEFORE_REDRAW, function() { ++ let [x, y] = icon.get_transformed_position(); ++ clickProxy.set_position(x, y); ++ }); ++ }); ++ ++ icon.connect("destroy", function() { ++ Main.panel._rightBox.disconnect(icon._proxyAlloc); ++ clickProxy.destroy(); ++ }); ++ ++ clickProxy.connect('button-release-event', function(actor, event) { ++ icon.click(event); ++ }); ++ ++ icon._clickProxy = clickProxy; ++ ++ /* Fixme: HACK */ ++ Meta.later_add(Meta.LaterType.BEFORE_REDRAW, function() { ++ let [x, y] = icon.get_transformed_position(); ++ clickProxy.set_position(x, y); ++ return false; ++ }); ++ let timerId = 0; ++ let i = 0; ++ timerId = Mainloop.timeout_add(500, function() { ++ icon.set_size(icon.width == iconSize ? iconSize - 1 : iconSize, ++ icon.width == iconSize ? iconSize - 1 : iconSize); ++ i++; ++ if (i == 2) ++ Mainloop.source_remove(timerId); ++ }); ++} ++ ++function onTrayIconRemoved(o, icon) { ++ let parent = icon.get_parent(); ++ parent.destroy(); ++ icon.destroy(); ++ icons.splice(icons.indexOf(icon), 1); ++} ++ ++function moveToTop() { ++ notificationDaemon._trayManager.disconnect(notificationDaemon._trayIconAddedId); ++ notificationDaemon._trayManager.disconnect(notificationDaemon._trayIconRemovedId); ++ trayAddedId = notificationDaemon._trayManager.connect('tray-icon-added', onTrayIconAdded); ++ trayRemovedId = notificationDaemon._trayManager.connect('tray-icon-removed', onTrayIconRemoved); ++ ++ notificationDaemon._getSource = createSource; ++ ++ let toDestroy = []; ++ if (notificationDaemon._sources) { ++ for (let i = 0; i < notificationDaemon._sources.length; i++) { ++ let source = notificationDaemon._sources[i]; ++ if (!source.trayIcon) ++ continue; ++ let parent = source.trayIcon.get_parent(); ++ parent.remove_actor(source.trayIcon); ++ onTrayIconAdded(this, source.trayIcon, source.initialTitle); ++ toDestroy.push(source); ++ } ++ } ++ else { ++ for (let i = 0; i < notificationDaemon._iconBox.get_n_children(); i++) { ++ let button = notificationDaemon._iconBox.get_child_at_index(i); ++ let icon = button.child; ++ button.remove_actor(icon); ++ onTrayIconAdded(this, icon, ''); ++ toDestroy.push(button); ++ } ++ } ++ ++ for (let i = 0; i < toDestroy.length; i++) { ++ toDestroy[i].destroy(); ++ } ++} ++ ++function moveToTray() { ++ if (trayAddedId != 0) { ++ notificationDaemon._trayManager.disconnect(trayAddedId); ++ trayAddedId = 0; ++ } ++ ++ if (trayRemovedId != 0) { ++ notificationDaemon._trayManager.disconnect(trayRemovedId); ++ trayRemovedId = 0; ++ } ++ ++ notificationDaemon._trayIconAddedId = notificationDaemon._trayManager.connect('tray-icon-added', ++ Lang.bind(notificationDaemon, notificationDaemon._onTrayIconAdded)); ++ notificationDaemon._trayIconRemovedId = notificationDaemon._trayManager.connect('tray-icon-removed', ++ Lang.bind(notificationDaemon, notificationDaemon._onTrayIconRemoved)); ++ ++ notificationDaemon._getSource = getSource; ++ ++ for (let i = 0; i < icons.length; i++) { ++ let icon = icons[i]; ++ let parent = icon.get_parent(); ++ if (icon._clicked) { ++ icon.disconnect(icon._clicked); ++ } ++ icon._clicked = undefined; ++ if (icon._proxyAlloc) { ++ Main.panel._rightBox.disconnect(icon._proxyAlloc); ++ } ++ icon._clickProxy.destroy(); ++ parent.remove_actor(icon); ++ parent.destroy(); ++ notificationDaemon._onTrayIconAdded(notificationDaemon, icon); ++ } ++ ++ icons = []; ++} ++ ++function disable() { ++ moveToTray(); ++} +diff --git a/extensions/top-icons/metadata.json.in b/extensions/top-icons/metadata.json.in +new file mode 100644 +index 0000000..f1e2436 +--- /dev/null ++++ b/extensions/top-icons/metadata.json.in +@@ -0,0 +1,10 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Top Icons", ++"description": "Shows legacy tray icons on top", ++"shell-version": [ "@shell_current@" ], ++"url": "http://94.247.144.115/repo/topicons/" ++} +diff --git a/extensions/top-icons/stylesheet.css b/extensions/top-icons/stylesheet.css +new file mode 100644 +index 0000000..25134b6 +--- /dev/null ++++ b/extensions/top-icons/stylesheet.css +@@ -0,0 +1 @@ ++/* This extensions requires no special styling */ +-- +2.3.6 + + +From 5ae70e47ef5417e556b1c5ec5ecc456f3e3d8e38 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 May 2015 18:05:41 +0200 +Subject: [PATCH 2/3] Add dash-to-dock extension + +--- + configure.ac | 5 +- + extensions/dash-to-dock/Makefile.am | 32 + + extensions/dash-to-dock/Settings.ui | 1782 ++++++++++++++++++++ + extensions/dash-to-dock/dockedDash.js | 1684 ++++++++++++++++++ + extensions/dash-to-dock/extension.js | 52 + + extensions/dash-to-dock/intellihide.js | 278 +++ + extensions/dash-to-dock/media/four.svg | 132 ++ + extensions/dash-to-dock/media/four_bottom.svg | 133 ++ + extensions/dash-to-dock/media/four_rtl.svg | 133 ++ + extensions/dash-to-dock/media/four_top.svg | 133 ++ + extensions/dash-to-dock/media/logo.svg | 561 ++++++ + extensions/dash-to-dock/media/one.svg | 107 ++ + extensions/dash-to-dock/media/one_bottom.svg | 108 ++ + extensions/dash-to-dock/media/one_rtl.svg | 108 ++ + extensions/dash-to-dock/media/one_top.svg | 108 ++ + extensions/dash-to-dock/media/three.svg | 121 ++ + extensions/dash-to-dock/media/three_bottom.svg | 122 ++ + extensions/dash-to-dock/media/three_rtl.svg | 122 ++ + extensions/dash-to-dock/media/three_top.svg | 122 ++ + extensions/dash-to-dock/media/two.svg | 118 ++ + extensions/dash-to-dock/media/two_bottom.svg | 119 ++ + extensions/dash-to-dock/media/two_rtl.svg | 119 ++ + extensions/dash-to-dock/media/two_top.svg | 119 ++ + extensions/dash-to-dock/metadata.json.in | 12 + + extensions/dash-to-dock/myConvenience.js | 103 ++ + extensions/dash-to-dock/myDash.js | 1672 ++++++++++++++++++ + ...me.shell.extensions.dash-to-dock.gschema.xml.in | 159 ++ + extensions/dash-to-dock/prefs.js | 367 ++++ + extensions/dash-to-dock/stylesheet.css | 181 ++ + 29 files changed, 8810 insertions(+), 2 deletions(-) + create mode 100644 extensions/dash-to-dock/Makefile.am + create mode 100644 extensions/dash-to-dock/Settings.ui + create mode 100644 extensions/dash-to-dock/dockedDash.js + create mode 100644 extensions/dash-to-dock/extension.js + create mode 100644 extensions/dash-to-dock/intellihide.js + create mode 100644 extensions/dash-to-dock/media/four.svg + create mode 100644 extensions/dash-to-dock/media/four_bottom.svg + create mode 100644 extensions/dash-to-dock/media/four_rtl.svg + create mode 100644 extensions/dash-to-dock/media/four_top.svg + create mode 100644 extensions/dash-to-dock/media/logo.svg + create mode 100644 extensions/dash-to-dock/media/one.svg + create mode 100644 extensions/dash-to-dock/media/one_bottom.svg + create mode 100644 extensions/dash-to-dock/media/one_rtl.svg + create mode 100644 extensions/dash-to-dock/media/one_top.svg + create mode 100644 extensions/dash-to-dock/media/three.svg + create mode 100644 extensions/dash-to-dock/media/three_bottom.svg + create mode 100644 extensions/dash-to-dock/media/three_rtl.svg + create mode 100644 extensions/dash-to-dock/media/three_top.svg + create mode 100644 extensions/dash-to-dock/media/two.svg + create mode 100644 extensions/dash-to-dock/media/two_bottom.svg + create mode 100644 extensions/dash-to-dock/media/two_rtl.svg + create mode 100644 extensions/dash-to-dock/media/two_top.svg + create mode 100644 extensions/dash-to-dock/metadata.json.in + create mode 100644 extensions/dash-to-dock/myConvenience.js + create mode 100644 extensions/dash-to-dock/myDash.js + create mode 100644 extensions/dash-to-dock/org.gnome.shell.extensions.dash-to-dock.gschema.xml.in + create mode 100644 extensions/dash-to-dock/prefs.js + create mode 100644 extensions/dash-to-dock/stylesheet.css + +diff --git a/configure.ac b/configure.ac +index 90b54da..d40b9e0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -29,7 +29,7 @@ AC_SUBST([SHELL_VERSION]) + dnl keep this in alphabetic order + CLASSIC_EXTENSIONS="apps-menu places-menu alternate-tab launch-new-instance window-list" + DEFAULT_EXTENSIONS="$CLASSIC_EXTENSIONS drive-menu screenshot-window-sizer windowsNavigator workspace-indicator" +-ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows example native-window-placement systemMonitor top-icons user-theme" ++ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows dash-to-dock example native-window-placement systemMonitor top-icons user-theme" + AC_SUBST(CLASSIC_EXTENSIONS, [$CLASSIC_EXTENSIONS]) + AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS]) + AC_ARG_ENABLE([extensions], +@@ -66,7 +66,7 @@ for e in $enable_extensions; do + [AC_MSG_WARN([libgtop-2.0 not found, disabling systemMonitor])]) + ;; + dnl keep this in alphabetic order +- alternate-tab|apps-menu|auto-move-windows|drive-menu|example|launch-new-instance|native-window-placement|places-menu|screenshot-window-sizer|top-icons|user-theme|window-list|windowsNavigator|workspace-indicator) ++ alternate-tab|apps-menu|auto-move-windows|dash-to-dock|drive-menu|example|launch-new-instance|native-window-placement|places-menu|screenshot-window-sizer|top-icons|user-theme|window-list|windowsNavigator|workspace-indicator) + ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e" + ;; + *) +@@ -82,6 +82,7 @@ AC_CONFIG_FILES([ + extensions/alternate-tab/Makefile + extensions/apps-menu/Makefile + extensions/auto-move-windows/Makefile ++ extensions/dash-to-dock/Makefile + extensions/drive-menu/Makefile + extensions/example/Makefile + extensions/launch-new-instance/Makefile +diff --git a/extensions/dash-to-dock/Makefile.am b/extensions/dash-to-dock/Makefile.am +new file mode 100644 +index 0000000..5e08acf +--- /dev/null ++++ b/extensions/dash-to-dock/Makefile.am +@@ -0,0 +1,32 @@ ++EXTENSION_ID = dash-to-dock ++ ++EXTRA_MODULES = \ ++ dockedDash.js \ ++ intellihide.js \ ++ myConvenience.js \ ++ myDash.js \ ++ prefs.js \ ++ Settings.ui ++ ++include ../../extension.mk ++include ../../settings.mk ++ ++mediadir = $(extensiondir)/media ++dist_media_DATA = \ ++ media/four_bottom.svg \ ++ media/four_rtl.svg \ ++ media/four.svg \ ++ media/four_top.svg \ ++ media/logo.svg \ ++ media/one_bottom.svg \ ++ media/one_rtl.svg \ ++ media/one.svg \ ++ media/one_top.svg \ ++ media/three_bottom.svg \ ++ media/three_rtl.svg \ ++ media/three.svg \ ++ media/three_top.svg \ ++ media/two_bottom.svg \ ++ media/two_rtl.svg \ ++ media/two.svg \ ++ media/two_top.svg +diff --git a/extensions/dash-to-dock/Settings.ui b/extensions/dash-to-dock/Settings.ui +new file mode 100644 +index 0000000..e283588 +--- /dev/null ++++ b/extensions/dash-to-dock/Settings.ui +@@ -0,0 +1,1782 @@ ++ ++ ++ ++ ++ ++ 1 ++ 0.050000000000000003 ++ 0.25 ++ ++ ++ 1 ++ 0.01 ++ 0.10000000000000001 ++ ++ ++ 0.33000000000000002 ++ 1 ++ 0.01 ++ 0.10000000000000001 ++ ++ ++ 1 ++ 0.050000000000000003 ++ 0.25 ++ ++ ++ 16 ++ 128 ++ 1 ++ 10 ++ ++ ++ True ++ True ++ 6 ++ 6 ++ 6 ++ 6 ++ ++ ++ True ++ False ++ 24 ++ 24 ++ 24 ++ 24 ++ vertical ++ 24 ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ Show the dock on ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ center ++ ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ Position on screen ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ 32 ++ ++ ++ Left ++ True ++ True ++ False ++ end ++ center ++ 0 ++ True ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ Bottom ++ True ++ True ++ False ++ center ++ 0 ++ True ++ position_left_button ++ ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ Top ++ True ++ True ++ False ++ center ++ 0 ++ bottom ++ True ++ position_left_button ++ ++ ++ ++ False ++ True ++ 2 ++ ++ ++ ++ ++ Right ++ True ++ True ++ False ++ center ++ 0 ++ True ++ position_left_button ++ ++ ++ ++ False ++ True ++ 3 ++ ++ ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ 100 ++ 80 ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ Hide the dock when it obstructs a window of the the current application. More refined settings are available. ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Intelligent autohide ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ 6 ++ ++ ++ True ++ True ++ True ++ center ++ center ++ 0.46000000834465027 ++ ++ ++ True ++ False ++ emblem-system-symbolic ++ ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ Insensitive Message Tray ++ True ++ True ++ False ++ 12 ++ 0 ++ True ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ 100 ++ 80 ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ 0 ++ Dock size limit ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ True ++ baseline ++ True ++ dock_size_adjustment ++ 0 ++ 2 ++ right ++ ++ ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ Panel mode: extend to the screen edge ++ True ++ True ++ False ++ 12 ++ 0 ++ True ++ ++ ++ 0 ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ 0 ++ Icon size limit ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ True ++ baseline ++ True ++ icon_size_adjustment ++ 1 ++ 0 ++ right ++ ++ ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ Fixed icon size: scroll to reveal other icons ++ True ++ True ++ False ++ 12 ++ 0 ++ True ++ ++ ++ 0 ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 2 ++ ++ ++ ++ ++ ++ ++ True ++ False ++ Position and size ++ ++ ++ False ++ ++ ++ ++ ++ True ++ False ++ 24 ++ 24 ++ 24 ++ 24 ++ vertical ++ 24 ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Show running applications ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Move the applications button at the beginning of the dock. ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ <i>Show Applications</i> icon first ++ True ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ Behaviour when clicking on the icon of a running application. ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Click action ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ center ++ ++ Do nothing ++ Minimize ++ Launch new instance ++ Cycle through windows ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ 100 ++ 80 ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ When set to minimize, double clicking minimizes all the windows of the application. ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Shift+Click action ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ center ++ ++ Do nothing ++ Minimize window ++ ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ The area of the dock close to the screen edge and the <i>Show Applications</i> icon are active. ++ True ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Switch workspace by scrolling on the dock ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 2 ++ ++ ++ ++ ++ 1 ++ ++ ++ ++ ++ True ++ False ++ Behavior ++ ++ ++ 1 ++ False ++ ++ ++ ++ ++ True ++ False ++ 24 ++ 24 ++ 24 ++ 24 ++ vertical ++ 24 ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ True ++ none ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ Few customizations meant to integrate the dock wih the default GNOME theme. Alternatively, specific options can be enabled below. ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Use built-in theme ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Save space reducing padding and border radius. ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Shrink the dash ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Show a dot for each windows of the application. ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Show windows counter indicators ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ vertical ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Tune the dash background opacity. ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Customize opacity ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ Opacity ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ True ++ custom_opacity_adjustement ++ on ++ False ++ 0 ++ 0 ++ 2 ++ right ++ ++ ++ ++ ++ True ++ True ++ 1 ++ ++ ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ 2 ++ ++ ++ ++ ++ True ++ False ++ Appearance ++ ++ ++ 2 ++ False ++ ++ ++ ++ ++ False ++ 24 ++ 24 ++ True ++ True ++ vertical ++ 5 ++ ++ ++ ++ False ++ True ++ 10 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ <b>Dash to Dock</b> ++ True ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ True ++ False ++ center ++ ++ ++ True ++ False ++ end ++ version: ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ start ++ ... ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ False ++ True ++ 2 ++ ++ ++ ++ ++ True ++ False ++ Moves the dash out of the overview transforming it in a dock ++ center ++ True ++ ++ ++ False ++ True ++ 3 ++ ++ ++ ++ ++ True ++ False ++ center ++ 5 ++ ++ ++ True ++ False ++ Created by ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ True ++ Michele (<a href="mailto:micxgx@gmail.com">micxgx@gmail.com</a>) ++ True ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ False ++ True ++ 4 ++ ++ ++ ++ ++ Webpage ++ True ++ True ++ True ++ ++ center ++ none ++ https://micheleg.github.io/dash-to-dock/ ++ ++ ++ False ++ True ++ 5 ++ ++ ++ ++ ++ True ++ True ++ end ++ <span size="small">This program comes with ABSOLUTELY NO WARRANTY. ++See the <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, version 2 or later</a> for details.</span> ++ True ++ center ++ True ++ ++ ++ True ++ True ++ 6 ++ ++ ++ ++ ++ 3 ++ ++ ++ ++ ++ True ++ False ++ About ++ ++ ++ 3 ++ False ++ ++ ++ ++ ++ 1000 ++ 50 ++ 250 ++ ++ ++ 1 ++ 0.050000000000000003 ++ 0.25 ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ vertical ++ ++ ++ True ++ False ++ 0 ++ in ++ ++ ++ True ++ False ++ none ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ Show the dock by mouse hover on the screen edge. ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Autohide ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ Push to show: require pressure to show the dock ++ True ++ True ++ False ++ 12 ++ 0 ++ True ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ 32 ++ ++ ++ True ++ False ++ True ++ 0 ++ Show the dock when it doesn't obstruct application windows. ++ True ++ ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Dodge windows ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ True ++ end ++ center ++ ++ ++ 1 ++ 0 ++ 2 ++ ++ ++ ++ ++ Only consider windows of the focused application ++ True ++ True ++ False ++ 12 ++ 0 ++ True ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ True ++ False ++ 12 ++ 12 ++ 12 ++ 12 ++ True ++ 6 ++ 32 ++ ++ ++ True ++ True ++ end ++ animation_time_adjustment ++ 3 ++ ++ ++ 1 ++ 0 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Animation duration (s) ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ True ++ True ++ end ++ hide_timeout_adjustment ++ 3 ++ ++ ++ 1 ++ 1 ++ ++ ++ ++ ++ True ++ True ++ end ++ show_timeout_adjustment ++ 3 ++ ++ ++ 1 ++ 2 ++ ++ ++ ++ ++ True ++ True ++ 0.000 ++ pressure_threshold_adjustment ++ ++ ++ 1 ++ 3 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Hide timeout (s) ++ ++ ++ 0 ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Show timeout (s) ++ ++ ++ 0 ++ 2 ++ ++ ++ ++ ++ True ++ False ++ True ++ 0 ++ Pressure threshold ++ ++ ++ 0 ++ 3 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/dockedDash.js b/extensions/dash-to-dock/dockedDash.js +new file mode 100644 +index 0000000..1e145c6 +--- /dev/null ++++ b/extensions/dash-to-dock/dockedDash.js +@@ -0,0 +1,1684 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Clutter = imports.gi.Clutter; ++const GLib = imports.gi.GLib; ++const Gtk = imports.gi.Gtk; ++const Lang = imports.lang; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++const Mainloop = imports.mainloop; ++const Params = imports.misc.params; ++ ++const Main = imports.ui.main; ++const Dash = imports.ui.dash; ++const IconGrid = imports.ui.iconGrid; ++const MessageTray = imports.ui.messageTray; ++const Overview = imports.ui.overview; ++const OverviewControls = imports.ui.overviewControls; ++const PointerWatcher = imports.ui.pointerWatcher; ++const Tweener = imports.ui.tweener; ++const Signals = imports.signals; ++const ViewSelector = imports.ui.viewSelector; ++const WorkspaceSwitcherPopup= imports.ui.workspaceSwitcherPopup; ++const Layout = imports.ui.layout; ++const LayoutManager = imports.ui.main.layoutManager; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Convenience = Me.imports.myConvenience; ++const Intellihide = Me.imports.intellihide; ++const MyDash = Me.imports.myDash; ++ ++const DOCK_DWELL_CHECK_INTERVAL = 100; //TODO ++ ++const State = { ++ HIDDEN: 0, ++ SHOWING: 1, ++ SHOWN: 2, ++ HIDING: 3 ++}; ++ ++/* Return the actual position reverseing left and right in rtl */ ++function getPosition(settings) { ++ let position = settings.get_enum('dock-position'); ++ if(Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) { ++ if (position == St.Side.LEFT) ++ position = St.Side.RIGHT; ++ else if (position == St.Side.RIGHT) ++ position = St.Side.LEFT; ++ } ++ return position; ++} ++ ++/* ++ * A simple St.Widget with one child whose allocation takes into account the ++ * slide out of its child via the _slidex parameter ([0:1]). ++ * ++ * Required since I want to track the input region of this container which is ++ * based on its allocation even if the child overlows the parent actor. By doing ++ * this the region of the dash that is slideout is not steling anymore the input ++ * regions making the extesion usable when the primary monitor is the right one. ++ * ++ * The slidex parameter can be used to directly animate the sliding. The parent ++ * must have a WEST (SOUTH) anchor_point to achieve the sliding to the RIGHT (BOTTOM) ++ * side. ++ * ++ * It can't be an extended object because of this: https://bugzilla.gnome.org/show_bug.cgi?id=688973. ++ * thus use the Shell.GenericContainer pattern. ++*/ ++ ++const DashSlideContainer = new Lang.Class({ ++ Name: 'DashSlideContainer', ++ ++ _init: function(params) { ++ ++ /* Default local params */ ++ let localDefaults = { ++ side: St.Side.LEFT, ++ initialSlideValue: 1 ++ } ++ ++ let localParams = Params.parse(params, localDefaults, true); ++ ++ if (params){ ++ /* Remove local params before passing the params to the parent ++ constructor to avoid errors. */ ++ let prop; ++ for (prop in localDefaults) { ++ if ((prop in params)) ++ delete params[prop]; ++ } ++ } ++ ++ this.actor = new Shell.GenericContainer(params); ++ this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth)); ++ this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight)); ++ this.actor.connect('allocate', Lang.bind(this, this._allocate)); ++ ++ this.actor._delegate = this; ++ ++ this._child = null; ++ ++ // slide parameter: 1 = visible, 0 = hidden. ++ this._slidex = localParams.initialSlideValue; ++ this._side = localParams.side; ++ this._slideoutSize = 0; // minimum size when slided out ++ }, ++ ++ ++ _allocate: function(actor, box, flags) { ++ ++ if (this._child == null) ++ return; ++ ++ let availWidth = box.x2 - box.x1; ++ let availHeight = box.y2 - box.y1; ++ let [minChildWidth, minChildHeight, natChildWidth, natChildHeight] = ++ this._child.get_preferred_size(); ++ ++ let childWidth = natChildWidth; ++ let childHeight = natChildHeight; ++ ++ let childBox = new Clutter.ActorBox(); ++ ++ let slideoutSize = this._slideoutSize; ++ ++ if (this._side == St.Side.LEFT) { ++ childBox.x1 = (this._slidex -1)*(childWidth - slideoutSize); ++ childBox.x2 = slideoutSize + this._slidex*(childWidth - slideoutSize); ++ childBox.y1 = 0; ++ childBox.y2 = childBox.y1 + childHeight; ++ } else if (this._side == St.Side.RIGHT ++ || this._side == St.Side.BOTTOM) { ++ childBox.x1 = 0; ++ childBox.x2 = childWidth; ++ childBox.y1 = 0; ++ childBox.y2 = childBox.y1 + childHeight; ++ } else if (this._side == St.Side.TOP) { ++ childBox.x1 = 0; ++ childBox.x2 = childWidth; ++ childBox.y1 = (this._slidex -1)*(childHeight - slideoutSize); ++ childBox.y2 = slideoutSize + this._slidex*(childHeight - slideoutSize); ++ } ++ ++ this._child.allocate(childBox, flags); ++ this._child.set_clip(-childBox.x1, -childBox.y1, ++ -childBox.x1+availWidth,-childBox.y1 + availHeight); ++ }, ++ ++ /* Just the child width but taking into account the slided out part */ ++ _getPreferredWidth: function(actor, forHeight, alloc) { ++ let [minWidth, natWidth ] = this._child.get_preferred_width(forHeight); ++ if (this._side == St.Side.LEFT ++ || this._side == St.Side.RIGHT) { ++ minWidth = (minWidth - this._slideoutSize)*this._slidex + this._slideoutSize; ++ natWidth = (natWidth - this._slideoutSize)*this._slidex + this._slideoutSize; ++ } ++ ++ alloc.min_size = minWidth; ++ alloc.natural_size = natWidth; ++ }, ++ ++ /* Just the child height but taking into account the slided out part */ ++ _getPreferredHeight: function(actor, forWidth, alloc) { ++ let [minHeight, natHeight] = this._child.get_preferred_height(forWidth); ++ if (this._side == St.Side.TOP ++ || this._side == St.Side.BOTTOM) { ++ minHeight = (minHeight - this._slideoutSize)*this._slidex + this._slideoutSize; ++ natHeight = (natHeight - this._slideoutSize)*this._slidex + this._slideoutSize; ++ } ++ alloc.min_size = minHeight; ++ alloc.natural_size = natHeight; ++ }, ++ ++ /* I was expecting it to be a virtual function... stil I don't understand ++ how things work. ++ */ ++ add_child: function(actor) { ++ ++ /* I'm supposed to have only on child */ ++ if(this._child !== null) { ++ this.actor.remove_child(actor); ++ } ++ ++ this._child = actor; ++ this.actor.add_child(actor); ++ }, ++ ++ set slidex(value) { ++ this._slidex = value; ++ this._child.queue_relayout(); ++ }, ++ ++ get slidex() { ++ return this._slidex; ++ } ++ ++}); ++ ++const dockedDash = new Lang.Class({ ++ Name: 'dockedDash', ++ ++ _init: function(settings) { ++ ++ this._rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL; ++ ++ // Load settings ++ this._settings = settings; ++ this._bindSettingsChanges(); ++ ++ this._position = getPosition(settings); ++ this._isHorizontal = ( this._position == St.Side.TOP || ++ this._position == St.Side.BOTTOM ); ++ ++ // Temporary ignore hover events linked to autohide for whatever reason ++ this._ignoreHover = false; ++ this._oldignoreHover = null; ++ // This variables are linked to the settings regardles of autohide or intellihide ++ // being temporary disable. Get set by _updateVisibilityMode; ++ this._autohideIsEnabled = null; ++ this._intellihideIsEnabled = null; ++ this._fixedIsEnabled = null; ++ ++ // Create intellihide object to monitor windows overlapping ++ this._intellihide = new Intellihide.intellihide(this._settings); ++ ++ // initialize dock state ++ this._dockState = State.HIDDEN; ++ ++ /* status variable: true when the overview is shown through the dash ++ * applications button. ++ */ ++ this.forcedOverview = false; ++ ++ // Put dock on the primary monitor ++ this._monitor = Main.layoutManager.primaryMonitor; ++ ++ // this store size and the position where the dash is shown; ++ // used by intellihide module to check window overlap. ++ this.staticBox = new Clutter.ActorBox(); ++ ++ // Initialize pressure barrier variables ++ this._canUsePressure = false; ++ this._pressureBarrier = null; ++ this._barrier = null; ++ this._messageTrayShowing = false; ++ this._removeBarrierTimeoutId = 0; ++ ++ // Initialize dwelling system variables ++ this._dockDwelling = false; ++ this._dockWatch = null; ++ this._dockDwellUserTime = 0; ++ this._dockDwellTimeoutId = 0 ++ ++ // Create a new dash object ++ this.dash = new MyDash.myDash(this._settings); ++ ++ // set stored icon size to the new dash ++ Main.overview.dashIconSize = this.dash.iconSize; ++ ++ // connect app icon into the view selector ++ this.dash.showAppsButton.connect('notify::checked', Lang.bind(this, this._onShowAppsButtonToggled)); ++ ++ // Create the main actor and the containers for sliding in and out and ++ // centering, turn on track hover ++ ++ let positionStyleClass = ['top', 'right', 'bottom', 'left']; ++ // This is the centering actor ++ this.actor = new St.Bin({ name: 'dashtodockContainer',reactive: false, ++ style_class:positionStyleClass[this._position], ++ x_align: this._isHorizontal?St.Align.MIDDLE:St.Align.START, ++ y_align: this._isHorizontal?St.Align.START:St.Align.MIDDLE}); ++ this.actor._delegate = this; ++ ++ // This is the sliding actor whose allocation is to be tracked for input regions ++ this._slider = new DashSlideContainer({side: this._position, initialSlideValue: 0}); ++ ++ // This is the actor whose hover status us tracked for autohide ++ this._box = new St.BoxLayout({ name: 'dashtodockBox', reactive: true, track_hover:true } ); ++ this._box.connect("notify::hover", Lang.bind(this, this._hoverChanged)); ++ ++ // Create and apply height constraint to the dash. It's controlled by this.actor height ++ this.constrainSize = new Clutter.BindConstraint({ source: this.actor, ++ coordinate: this._isHorizontal?Clutter.BindCoordinate.WIDTH:Clutter.BindCoordinate.HEIGHT }); ++ this.dash.actor.add_constraint(this.constrainSize); ++ ++ // Connect global signals ++ this._signalsHandler = new Convenience.GlobalSignalsHandler(); ++ this._signalsHandler.add( ++ [ ++ Main.overview, ++ 'item-drag-begin', ++ Lang.bind(this, this._onDragStart) ++ ], ++ [ ++ Main.overview, ++ 'item-drag-end', ++ Lang.bind(this, this._onDragEnd) ++ ], ++ [ ++ Main.overview, ++ 'item-drag-cancelled', ++ Lang.bind(this, this._onDragEnd) ++ ], ++ // update wne monitor changes, for instance in multimonitor when monitor are attached ++ [ ++ global.screen, ++ 'monitors-changed', ++ Lang.bind(this, this._resetPosition ) ++ ], ++ [ ++ Main.overview, ++ 'showing', ++ Lang.bind(this, this._onOverviewShowing) ++ ], ++ [ ++ Main.overview, ++ 'hiding', ++ Lang.bind(this, this._onOverviewHiding) ++ ], ++ // Hide on appview ++ [ ++ Main.overview.viewSelector, ++ 'page-changed', ++ Lang.bind(this, this._pageChanged) ++ ], ++ [ ++ Main.overview.viewSelector, ++ 'page-empty', ++ Lang.bind(this, this._onPageEmpty) ++ ], ++ // Ensure the ShowAppsButton status is kept in sync ++ [ ++ Main.overview.viewSelector._showAppsButton, ++ 'notify::checked', ++ Lang.bind(this, this._syncShowAppsButtonToggled) ++ ], ++ [ ++ Main.messageTray, ++ 'showing', ++ Lang.bind(this, this._onMessageTrayShowing) ++ ], ++ [ ++ Main.messageTray, ++ 'hiding', ++ Lang.bind(this, this._onMessageTrayHiding) ++ ], ++ // Monitor windows overlapping ++ [ ++ this._intellihide, ++ 'status-changed', ++ Lang.bind(this, this._updateDashVisibility) ++ ], ++ // Keep dragged icon consistent in size with this dash ++ [ ++ this.dash, ++ 'icon-size-changed', ++ Lang.bind(this, function() { ++ Main.overview.dashIconSize = this.dash.iconSize; ++ }) ++ ], ++ // This duplicate the similar signal which is in owerview.js. ++ // Being connected and thus executed later this effectively ++ // overwrite any attempt to use the size of the default dash ++ //which given the customization is usually much smaller. ++ // I can't easily disconnect the original signal ++ [ ++ Main.overview._controls.dash, ++ 'icon-size-changed', ++ Lang.bind(this, function() { ++ Main.overview.dashIconSize = this.dash.iconSize; ++ }) ++ ] ++ ); ++ ++ this._injectionsHandler = new Convenience.InjectionsHandler(); ++ this._themeManager = new themeManager(this._settings, this.actor, this.dash); ++ ++ // Since the actor is not a topLevel child and its parent is now not added to the Chrome, ++ // the allocation change of the parent container (slide in and slideout) doesn't trigger ++ // anymore an update of the input regions. Force the update manually. ++ this.actor.connect('notify::allocation', ++ Lang.bind(Main.layoutManager, Main.layoutManager._queueUpdateRegions)); ++ ++ this.dash._container.connect('allocation-changed', Lang.bind(this, this._updateStaticBox)); ++ this._slider.actor.connect(this._isHorizontal?'notify::x':'notify::y', Lang.bind(this, this._updateStaticBox)); ++ ++ // sync hover after a popupmenu is closed ++ this.dash.connect('menu-closed', Lang.bind(this, function(){this._box.sync_hover();})); ++ ++ // Restore dash accessibility ++ Main.ctrlAltTabManager.addGroup( ++ this.dash.actor, _("Dash"),'user-bookmarks-symbolic', ++ {focusCallback: Lang.bind(this, this._onAccessibilityFocus)}); ++ ++ // Load optional features ++ this._optionalScrollWorkspaceSwitch(); ++ ++ // Delay operations that require the shell to be fully loaded and with ++ // user theme applied. ++ ++ this._paintId = this.actor.connect("paint", Lang.bind(this, this._initialize)); ++ ++ // Hide usual Dash ++ Main.overview._controls.dash.actor.hide(); ++ ++ // Also set dash width to 1, so it's almost not taken into account by code ++ // calculaing the reserved space in the overview. The reason to keep it at 1 is ++ // to allow its visibility change to trigger an allocaion of the appGrid which ++ // in turn is triggergin the appsIcon spring animation, required when no other ++ // actors has this effect, i.e in horizontal mode and without the workspaceThumnails ++ // 1 static workspace only) ++ Main.overview._controls.dash.actor.set_width(1); ++ ++ // Manage the which is used to reserve space in the overview for the dock ++ // Add and additional dashSpacer positioned according to the dash positioning. ++ // It gets restored on extension unload. ++ this._dashSpacer = new OverviewControls.DashSpacer(); ++ this._dashSpacer.setDashActor(this._box); ++ ++ // shift overview messageIndicator for bottom dock ++ this._oldMessageIndicatorPosition = Main.overview._controls._indicator.actor.get_first_child().y; ++ if (this._position == St.Side.BOTTOM) { ++ this._dashSpacer.connect('notify::height', Lang.bind(this, function(){ ++ Main.overview._controls._indicator.actor.get_first_child().y = -this._dashSpacer.height; ++ })); ++ } ++ ++ if (this._position == St.Side.LEFT) ++ Main.overview._controls._group.insert_child_at_index(this._dashSpacer, this._rtl?-1:0); // insert on first ++ else if (this._position == St.Side.RIGHT) ++ Main.overview._controls._group.insert_child_at_index(this._dashSpacer, this._rtl?0:-1); // insert on last ++ else if (this._position == St.Side.TOP) ++ Main.overview._overview.insert_child_at_index(this._dashSpacer, 0); ++ else if (this._position == St.Side.BOTTOM) ++ Main.overview._overview.insert_child_at_index(this._dashSpacer, -1); ++ ++ // Add dash container actor and the container to the Chrome. ++ this.actor.set_child(this._slider.actor); ++ this._slider.add_child(this._box); ++ this._box.add_actor(this.dash.actor); ++ ++ // Add aligning container without tracking it for input region (old affectsinputRegion: false that was removed). ++ // The public method trackChrome requires the actor to be child of a tracked actor. Since I don't want the parent ++ // to be tracked I use the private internal _trackActor instead. ++ Main.uiGroup.add_child(this.actor); ++ Main.layoutManager._trackActor(this._slider.actor, {trackFullscreen: true}); ++ ++ // Keep the dash below the modalDialogGroup ++ Main.layoutManager.uiGroup.set_child_below_sibling(this.actor,Main.layoutManager.modalDialogGroup); ++ ++ if ( this._settings.get_boolean('dock-fixed') ) ++ Main.layoutManager._trackActor(this.dash.actor, {affectsStruts: true}); ++ ++ // pretend this._slider is isToplevel child so that fullscreen is actually tracked ++ let index = Main.layoutManager._findActor(this._slider.actor); ++ Main.layoutManager._trackedActors[index].isToplevel = true ; ++ ++ // Set initial position ++ this._resetPosition(); ++ ++ }, ++ ++ _initialize: function(){ ++ ++ if(this._paintId>0){ ++ this.actor.disconnect(this._paintId); ++ this._paintId=0; ++ } ++ ++ this.dash.setIconSize(this._settings.get_int('dash-max-icon-size'), true); ++ ++ // Apply custome css class according to the settings ++ this._themeManager.updateCustomTheme(); ++ ++ // Since Gnome 3.8 dragging an app without having opened the overview before cause the attemp to ++ //animate a null target since some variables are not initialized when the viewSelector is created ++ if(Main.overview.viewSelector._activePage == null) ++ Main.overview.viewSelector._activePage = Main.overview.viewSelector._workspacesPage; ++ ++ this._updateVisibilityMode(); ++ ++ // Setup pressure barrier (GS38+ only) ++ this._updatePressureBarrier(); ++ this._updateBarrier(); ++ ++ // setup dwelling system if pressure barriers are not available ++ this._setupDockDwellIfNeeded(); ++ ++ // Insensitive Message Tray ++ this._updateInsensitiveTray(); ++ }, ++ ++ destroy: function(){ ++ ++ // Disconnect global signals ++ this._signalsHandler.destroy(); ++ // The dash and intellihide have global signals as well internally ++ this.dash.destroy(); ++ this._intellihide.destroy(); ++ ++ this._injectionsHandler.destroy(); ++ ++ // Destroy main clutter actor: this should be sufficient removing it and ++ // destroying all its children ++ this.actor.destroy(); ++ ++ // Remove barrier timeout ++ if (this._removeBarrierTimeoutId > 0) ++ Mainloop.source_remove(this._removeBarrierTimeoutId); ++ ++ // Remove existing barrier ++ this._removeBarrier(); ++ ++ // Remove pointer watcher ++ if(this._dockWatch){ ++ PointerWatcher.getPointerWatcher()._removeWatch(this._dockWatch); ++ this._dockWatch = null; ++ } ++ ++ // Remove the dashSpacer ++ this._dashSpacer.destroy(); ++ ++ // restore messageIndicator position ++ Main.overview._controls._indicator.actor.get_first_child().y = this._oldMessageIndicatorPosition; ++ ++ // Reshow normal dash previously hidden, restore panel position if changed. ++ Main.overview._controls.dash.actor.show(); ++ Main.overview._controls.dash.actor.set_width(-1); //reset default dash size ++ // This force the recalculation of the icon size ++ Main.overview._controls.dash._maxHeight = -1; ++ ++ // reset stored icon size to the default dash ++ Main.overview.dashIconSize = Main.overview._controls.dash.iconSize; ++ // Reshow panel corners ++ this._revertPanelCorners(); ++ }, ++ ++ _bindSettingsChanges: function() { ++ ++ this._settings.connect('changed::scroll-switch-workspace', Lang.bind(this, function(){ ++ this._optionalScrollWorkspaceSwitch(this._settings.get_boolean('scroll-switch-workspace')); ++ })); ++ ++ this._settings.connect('changed::dash-max-icon-size', Lang.bind(this, function(){ ++ this.dash.setIconSize(this._settings.get_int('dash-max-icon-size')); ++ })); ++ ++ this._settings.connect('changed::icon-size-fixed', Lang.bind(this, function(){ ++ this.dash.setIconSize(this._settings.get_int('dash-max-icon-size')); ++ })); ++ ++ this._settings.connect('changed::show-running', Lang.bind(this, function(){ ++ this.dash.resetAppIcons(); ++ })); ++ ++ this._settings.connect('changed::show-apps-at-top', Lang.bind(this, function(){ ++ this.dash.resetAppIcons(); ++ })); ++ ++ this._settings.connect('changed::dock-fixed', Lang.bind(this, function(){ ++ ++ if(this._settings.get_boolean('dock-fixed')) { ++ Main.layoutManager._trackActor(this.dash.actor, {affectsStruts: true}); ++ } else { ++ Main.layoutManager._untrackActor(this.dash.actor); ++ } ++ ++ this._resetPosition(); ++ ++ // Add or remove barrier depending on if dock-fixed ++ this._updateBarrier(); ++ ++ this._updateVisibilityMode(); ++ })); ++ ++ this._settings.connect('changed::intellihide', Lang.bind(this, this._updateVisibilityMode)); ++ ++ this._settings.connect('changed::intellihide-perapp', Lang.bind(this, function(){ ++ this._intellihide.forceUpdate(); ++ })); ++ ++ this._settings.connect('changed::autohide', Lang.bind(this, function(){ ++ this._updateVisibilityMode(); ++ this._updateBarrier(); ++ })); ++ this._settings.connect('changed::extend-height', Lang.bind(this,this._resetPosition)); ++ this._settings.connect('changed::preferred-monitor', Lang.bind(this,this._resetPosition)); ++ this._settings.connect('changed::height-fraction', Lang.bind(this,this._resetPosition)); ++ this._settings.connect('changed::insensitive-message-tray', Lang.bind(this,this._updateInsensitiveTray)); ++ this._settings.connect('changed::require-pressure-to-show', Lang.bind(this,function(){ ++ // Remove pointer watcher ++ if(this._dockWatch){ ++ PointerWatcher.getPointerWatcher()._removeWatch(this._dockWatch); ++ this._dockWatch = null; ++ } ++ this._setupDockDwellIfNeeded(); ++ this._updateBarrier(); ++ })); ++ this._settings.connect('changed::pressure-threshold', Lang.bind(this,function() { ++ this._updatePressureBarrier(); ++ this._updateBarrier(); ++ })); ++ ++ }, ++ ++ // This is call when visibility settings change ++ _updateVisibilityMode: function() { ++ ++ if (this._settings.get_boolean('dock-fixed')) { ++ this._fixedIsEnabled = true; ++ this._autohideIsEnabled = false; ++ this._intellihideIsEnabled = false; ++ } else { ++ this._fixedIsEnabled = false; ++ this._autohideIsEnabled = this._settings.get_boolean('autohide') ++ this._intellihideIsEnabled = this._settings.get_boolean('intellihide') ++ } ++ ++ if (this._intellihideIsEnabled) ++ this._intellihide.enable(); ++ else ++ this._intellihide.disable(); ++ ++ this._updateDashVisibility(); ++ }, ++ ++ /* Show/hide dash based on, in order of priority: ++ * overview visibility ++ * fixed mode ++ * intellihide ++ * autohide ++ * overview visibility ++ */ ++ _updateDashVisibility: function() { ++ ++ if (Main.overview.visibleTarget) ++ return; ++ ++ if ( this._fixedIsEnabled ) { ++ this._removeAnimations(); ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ } else if (this._intellihideIsEnabled) { ++ if ( this._intellihide.getOverlapStatus() ) { ++ this._ignoreHover = false; ++ // Do not hide if autohide is enabled and mouse is hover ++ if (!this._box.hover || !this._autohideIsEnabled) { ++ this._animateOut(this._settings.get_double('animation-time'), 0); ++ } ++ } else { ++ this._ignoreHover = true; ++ this._removeAnimations(); ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ } ++ } else { ++ if (this._autohideIsEnabled) { ++ this._ignoreHover = false; ++ global.sync_pointer(); ++ ++ if( this._box.hover ) { ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ } else { ++ this._animateOut(this._settings.get_double('animation-time'), 0); ++ } ++ ++ } else { ++ this._animateOut(this._settings.get_double('animation-time'), 0); ++ } ++ } ++ }, ++ ++ _onOverviewShowing: function() { ++ this._ignoreHover = true; ++ this._intellihide.disable(); ++ this._removeAnimations(); ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ }, ++ ++ _onOverviewHiding: function() { ++ this._ignoreHover = false; ++ this._intellihide.enable(); ++ this._updateDashVisibility(); ++ }, ++ ++ _hoverChanged: function() { ++ ++ if (!this._ignoreHover) { ++ ++ // Skip if dock is not in autohide mode for instance because it is shown ++ // by intellihide. ++ if(this._autohideIsEnabled) { ++ if( this._box.hover ) { ++ this._show(); ++ } else { ++ this._hide(); ++ } ++ } ++ } ++ }, ++ ++ _show: function() { ++ ++ if ( this._dockState == State.HIDDEN || this._dockState == State.HIDING ) { ++ ++ if(this._dockState == State.HIDING){ ++ // suppress all potential queued hiding animations - i.e. added to Tweener but not started, ++ // always give priority to show ++ this._removeAnimations(); ++ } ++ ++ this.emit("showing"); ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ } ++ }, ++ ++ _hide: function() { ++ ++ // If no hiding animation is running or queued ++ if ( this._dockState == State.SHOWN || this._dockState == State.SHOWING ) { ++ ++ let delay; ++ ++ if (this._dockState == State.SHOWING) { ++ //if a show already started, let it finish; queue hide without removing the show. ++ // to obtain this I increase the delay to avoid the overlap and interference ++ // between the animations ++ delay = this._settings.get_double('hide-delay') + this._settings.get_double('animation-time'); ++ } else { ++ delay = this._settings.get_double('hide-delay'); ++ } ++ ++ this.emit("hiding"); ++ this._animateOut(this._settings.get_double('animation-time'), delay); ++ ++ } ++ }, ++ ++ _animateIn: function(time, delay) { ++ ++ this._dockState = State.SHOWING; ++ ++ Tweener.addTween(this._slider,{ ++ slidex: 1, ++ time: time, ++ delay: delay, ++ transition: 'easeOutQuad', ++ onComplete: Lang.bind(this, function() { ++ this._dockState = State.SHOWN; ++ // Remove barrier so that mouse pointer is released and can access monitors on other side of dock ++ // NOTE: Delay needed to keep mouse from moving past dock and re-hiding dock immediately. This ++ // gives users an opportunity to hover over the dock ++ if (this._removeBarrierTimeoutId > 0) { ++ Mainloop.source_remove(this._removeBarrierTimeoutId); ++ } ++ this._removeBarrierTimeoutId = Mainloop.timeout_add(100, Lang.bind(this, this._removeBarrier)); ++ }) ++ }); ++ }, ++ ++ _animateOut: function(time, delay){ ++ ++ this._dockState = State.HIDING; ++ Tweener.addTween(this._slider,{ ++ slidex: 0, ++ time: time, ++ delay: delay , ++ transition: 'easeOutQuad', ++ onComplete: Lang.bind(this, function() { ++ this._dockState = State.HIDDEN; ++ this._updateBarrier(); ++ }) ++ }); ++ }, ++ ++ // Dwelling system based on the GNOME Shell 3.14 messageTray code. ++ _setupDockDwellIfNeeded: function() { ++ // If we don't have extended barrier features, then we need ++ // to support the old tray dwelling mechanism. ++ if (!global.display.supports_extended_barriers() || !this._settings.get_boolean('require-pressure-to-show')) { ++ let pointerWatcher = PointerWatcher.getPointerWatcher(); ++ this._dockWatch = pointerWatcher.addWatch(DOCK_DWELL_CHECK_INTERVAL, Lang.bind(this, this._checkDockDwell)); ++ this._dockDwelling = false; ++ this._dockDwellUserTime = 0; ++ } ++ }, ++ ++ _checkDockDwell: function(x, y) { ++ let monitor = this._monitor; ++ ++ // Check for the dock area ++ let shouldDwell = (x >= this.staticBox.x1 && x <= this.staticBox.x2 && ++ y >= this.staticBox.y1 && y <= this.staticBox.y2); ++ ++ // Check for the correct screen edge ++ // Position is approximated to the lower integer ++ if(this._position==St.Side.LEFT){ ++ shouldDwell = shouldDwell && x == this._monitor.x; ++ } else if(this._position==St.Side.RIGHT) { ++ shouldDwell = shouldDwell && x == this._monitor.x + this._monitor.width - 1; ++ } else if(this._position==St.Side.TOP) { ++ shouldDwell = shouldDwell && y == this._monitor.y; ++ } else if (this._position==St.Side.BOTTOM) { ++ shouldDwell = shouldDwell && y == this._monitor.y + this._monitor.height - 1; ++ } ++ ++ if (shouldDwell) { ++ // We only set up dwell timeout when the user is not hovering over the dock ++ // already (!this._box._hover). ++ // The _dockDwelling variable is used so that we only try to ++ // fire off one dock dwell - if it fails (because, say, the user has the mouse down), ++ // we don't try again until the user moves the mouse up and down again. ++ if (!this._dockDwelling && !this._box._hover && this._dockDwellTimeoutId == 0) { ++ // Save the interaction timestamp so we can detect user input ++ let focusWindow = global.display.focus_window; ++ this._dockDwellUserTime = focusWindow ? focusWindow.user_time : 0; ++ ++ this._dockDwellTimeoutId = Mainloop.timeout_add(this._settings.get_double('show-delay')*1000, ++ Lang.bind(this, this._dockDwellTimeout)); ++ GLib.Source.set_name_by_id(this._dockDwellTimeoutId, '[dash-to-dock] this._dockDwellTimeout'); ++ } ++ this._dockDwelling = true; ++ } else { ++ this._cancelDockDwell(); ++ this._dockDwelling = false; ++ } ++ }, ++ ++ _cancelDockDwell: function() { ++ if (this._dockDwellTimeoutId != 0) { ++ Mainloop.source_remove(this._dockDwellTimeoutId); ++ this._dockDwellTimeoutId = 0; ++ } ++ }, ++ ++ _dockDwellTimeout: function() { ++ this._dockDwellTimeoutId = 0; ++ ++ if (this._monitor.inFullscreen) ++ return GLib.SOURCE_REMOVE; ++ ++ // We don't want to open the tray when a modal dialog ++ // is up, so we check the modal count for that. When we are in the ++ // overview we have to take the overview's modal push into account ++ if (Main.modalCount > (Main.overview.visible ? 1 : 0)) ++ return GLib.SOURCE_REMOVE; ++ ++ // If the user interacted with the focus window since we started the tray ++ // dwell (by clicking or typing), don't activate the message tray ++ let focusWindow = global.display.focus_window; ++ let currentUserTime = focusWindow ? focusWindow.user_time : 0; ++ if (currentUserTime != this._dockDwellUserTime) ++ return GLib.SOURCE_REMOVE; ++ ++ // Reuse the pressure version function, the logic is the same ++ this._onPressureSensed(); ++ return GLib.SOURCE_REMOVE; ++ }, ++ ++ _updatePressureBarrier: function() { ++ this._canUsePressure = global.display.supports_extended_barriers(); ++ let pressureThreshold = this._settings.get_double('pressure-threshold'); ++ ++ // Remove existing pressure barrier ++ if (this._pressureBarrier) { ++ this._pressureBarrier.destroy(); ++ this._pressureBarrier = null; ++ } ++ ++ // Create new pressure barrier based on pressure threshold setting ++ if (this._canUsePressure) { ++ this._pressureBarrier = new Layout.PressureBarrier(pressureThreshold, this._settings.get_double('show-delay')*1000, ++ Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.OVERVIEW); ++ this._pressureBarrier.connect('trigger', Lang.bind(this, function(barrier){ ++ if (this._monitor.inFullscreen) ++ return; ++ this._onPressureSensed(); ++ })); ++ } ++ }, ++ ++ // handler for mouse pressure sensed ++ _onPressureSensed: function() { ++ ++ if (Main.overview.visibleTarget) ++ return; ++ ++ // In case the mouse move away from the dock area before hovering it, in such case the leave event ++ // would never be triggered and the dock would stay visible forever. ++ let triggerTimeoutId = Mainloop.timeout_add(250, ++ Lang.bind(this, function() { ++ triggerTimeoutId = 0; ++ this._hoverChanged(); ++ return GLib.SOURCE_REMOVE; ++ })); ++ ++ this._show(); ++ }, ++ ++ _onMessageTrayShowing: function() { ++ ++ // Temporary move the dash below the top panel so that it slide below it. ++ Main.layoutManager.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.panelBox); ++ ++ // Remove other tweens that could mess with the state machine ++ Tweener.removeTweens(this.actor); ++ this._oldignoreHover = this._ignoreHover; ++ this._ignoreHover = true; ++ this.dash.cleanUpLabels(); ++ Tweener.addTween(this.actor, { ++ y: this._y0 - Main.messageTray.actor.height, ++ time: MessageTray.ANIMATION_TIME, ++ transition: 'easeOutQuad' ++ }); ++ this._messageTrayShowing = true; ++ this._updateBarrier(); ++ }, ++ ++ _onMessageTrayHiding: function() { ++ ++ // Remove other tweens that could mess with the state machine ++ Tweener.removeTweens(this.actor); ++ Tweener.addTween(this.actor, { ++ y: this._y0, ++ time: MessageTray.ANIMATION_TIME, ++ transition: 'easeOutQuad', ++ onComplete: Lang.bind(this, function(){ ++ // Reset desired dash stack order (on top to accept dnd of app icons) ++ Main.layoutManager.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.modalDialogGroup); ++ // restore previous ignoreHover. If it was not set, set it to false ++ if (this._oldignoreHover !== null) ++ this._ignoreHover = this._oldignoreHover; ++ this._oldignoreHover == null; ++ if (!isMouseHover(this._box)) ++ this._box.hover = false; ++ }) ++ }); ++ ++ this._messageTrayShowing = false; ++ this._updateBarrier(); ++ }, ++ ++ // Remove pressure barrier ++ _removeBarrier: function() { ++ if (this._barrier) { ++ if (this._pressureBarrier) { ++ this._pressureBarrier.removeBarrier(this._barrier); ++ } ++ this._barrier.destroy(); ++ this._barrier = null; ++ } ++ this._removeBarrierTimeoutId = 0; ++ return false; ++ }, ++ ++ // Update pressure barrier size ++ _updateBarrier: function() { ++ // Remove existing barrier ++ this._removeBarrier(); ++ ++ // Manually reset pressure barrier ++ // This is necessary because we remove the pressure barrier when it is triggered to show the dock ++ if (this._pressureBarrier) { ++ this._pressureBarrier._reset(); ++ this._pressureBarrier._isTriggered = false; ++ } ++ ++ // Create new barrier ++ // Note: dash in fixed position doesn't use pressure barrier ++ if (this._slider.actor.visible && this._canUsePressure && this._autohideIsEnabled && this._settings.get_boolean('require-pressure-to-show') && !this._messageTrayShowing) { ++ let x1, x2, y1, y2, direction; ++ ++ if(this._position==St.Side.LEFT){ ++ x1 = this.staticBox.x1; ++ x2 = this.staticBox.x1; ++ y1 = this.staticBox.y1; ++ y2 = this.staticBox.y2; ++ direction = Meta.BarrierDirection.POSITIVE_X; ++ } else if(this._position==St.Side.RIGHT) { ++ x1 = this.staticBox.x2; ++ x2 = this.staticBox.x2; ++ y1 = this.staticBox.y1; ++ y2 = this.staticBox.y2; ++ direction = Meta.BarrierDirection.NEGATIVE_X; ++ } else if(this._position==St.Side.TOP) { ++ x1 = this.staticBox.x1; ++ x2 = this.staticBox.x2; ++ y1 = this.staticBox.y1; ++ y2 = this.staticBox.y1; ++ direction = Meta.BarrierDirection.POSITIVE_Y; ++ } else if (this._position==St.Side.BOTTOM) { ++ x1 = this.staticBox.x1; ++ x2 = this.staticBox.x2; ++ y1 = this.staticBox.y2; ++ y2 = this.staticBox.y2; ++ direction = Meta.BarrierDirection.NEGATIVE_Y; ++ } ++ ++ this._barrier = new Meta.Barrier({display: global.display, ++ x1: x1, x2: x2, ++ y1: y1, y2: y2, ++ directions: direction}); ++ if (this._pressureBarrier) { ++ this._pressureBarrier.addBarrier(this._barrier); ++ } ++ } ++ ++ }, ++ ++ _isPrimaryMonitor: function() { ++ return (this._monitor.x == Main.layoutManager.primaryMonitor.x && ++ this._monitor.y == Main.layoutManager.primaryMonitor.y); ++ }, ++ ++ _resetPosition: function() { ++ ++ // Ensure variables linked to settings are updated. ++ this._updateVisibilityMode(); ++ ++ this._monitor = this._getMonitor(); ++ ++ let unavailableTopSpace = 0; ++ let unavailableBottomSpace = 0; ++ ++ let extendHeight = this._settings.get_boolean('extend-height'); ++ ++ // Reserve space for the dash on the overview ++ // if the dock is on the primary monitor ++ if (this._isPrimaryMonitor()){ ++ unavailableTopSpace = Main.panel.actor.height; ++ this._dashSpacer.show(); ++ } else { ++ // No space is required in the overview of the dash ++ this._dashSpacer.hide(); ++ } ++ ++ let fraction = this._settings.get_double('height-fraction'); ++ ++ if(extendHeight) ++ fraction = 1; ++ else if(fraction<0 || fraction >1) ++ fraction = 0.95; ++ ++ let anchor_point; ++ ++ if(this._isHorizontal){ ++ ++ let availableWidth = this._monitor.width; ++ this.actor.width = Math.round( fraction * availableWidth); ++ ++ let pos_y; ++ if( this._position == St.Side.BOTTOM) { ++ pos_y = this._monitor.y + this._monitor.height; ++ anchor_point = Clutter.Gravity.SOUTH_WEST; ++ } else { ++ pos_y = this._monitor.y + unavailableTopSpace; ++ anchor_point = Clutter.Gravity.NORTH_WEST; ++ } ++ ++ this.actor.move_anchor_point_from_gravity(anchor_point); ++ this.actor.x = this._monitor.x + Math.round( (1-fraction)/2 * availableWidth); ++ this.actor.y = pos_y; ++ ++ if(extendHeight){ ++ this.dash._container.set_width(this.actor.width); ++ this.actor.add_style_class_name('extended'); ++ } else { ++ this.dash._container.set_width(-1); ++ this.actor.remove_style_class_name('extended'); ++ } ++ ++ } else { ++ ++ let availableHeight = this._monitor.height - unavailableTopSpace - unavailableBottomSpace; ++ this.actor.height = Math.round( fraction * availableHeight); ++ ++ let pos_x; ++ if( this._position == St.Side.RIGHT) { ++ pos_x = this._monitor.x + this._monitor.width; ++ anchor_point = Clutter.Gravity.NORTH_EAST; ++ } else { ++ pos_x = this._monitor.x; ++ anchor_point = Clutter.Gravity.NORTH_WEST; ++ } ++ ++ this.actor.move_anchor_point_from_gravity(anchor_point); ++ this.actor.x = pos_x; ++ this.actor.y = this._monitor.y + unavailableTopSpace + Math.round( (1-fraction)/2 * availableHeight); ++ ++ if(extendHeight){ ++ this.dash._container.set_height(this.actor.height); ++ this.actor.add_style_class_name('extended'); ++ } else { ++ this.dash._container.set_height(-1); ++ this.actor.remove_style_class_name('extended'); ++ } ++ } ++ ++ this._y0 = this.actor.y; ++ this._adjustPanelCorners(); ++ ++ this._updateStaticBox(); ++ }, ++ ++ _updateStaticBox: function() { ++ ++ this.staticBox.init_rect( ++ this.actor.x + this._slider.actor.x - (this._position==St.Side.RIGHT?this._box.width:0), ++ this.actor.y + this._slider.actor.y - (this._position==St.Side.BOTTOM?this._box.height:0), ++ this._box.width, ++ this._box.height ++ ); ++ ++ this._intellihide.updateTargetBox(this.staticBox); ++ }, ++ ++ // Adjust Panel corners ++ _adjustPanelCorners: function() { ++ let extendHeight = this._settings.get_boolean('extend-height'); ++ if (!this._isHorizontal && this._isPrimaryMonitor() && extendHeight && this._fixedIsEnabled) { ++ Main.panel._rightCorner.actor.hide(); ++ Main.panel._leftCorner.actor.hide(); ++ } else { ++ this._revertPanelCorners(); ++ } ++ }, ++ ++ _revertPanelCorners: function() { ++ Main.panel._leftCorner.actor.show(); ++ Main.panel._rightCorner.actor.show(); ++ }, ++ ++ _getMonitor: function(){ ++ ++ let monitorIndex = this._settings.get_int('preferred-monitor'); ++ let monitor; ++ ++ if (monitorIndex >0 && monitorIndex< Main.layoutManager.monitors.length) ++ monitor = Main.layoutManager.monitors[monitorIndex]; ++ else ++ monitor = Main.layoutManager.primaryMonitor; ++ ++ return monitor; ++ }, ++ ++ _removeAnimations: function() { ++ Tweener.removeTweens(this._slider); ++ }, ++ ++ _onDragStart: function(){ ++ // The dash need to be above the top_window_group, otherwise it doesn't ++ // accept dnd of app icons when not in overiew mode. ++ Main.layoutManager.uiGroup.set_child_above_sibling(this.actor, global.top_window_group); ++ this._oldignoreHover = this._ignoreHover; ++ this._ignoreHover = true; ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ }, ++ ++ _onDragEnd: function(){ ++ // Restore drag default dash stack order ++ Main.layoutManager.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.modalDialogGroup); ++ if (this._oldignoreHover !== null) ++ this._ignoreHover = this._oldignoreHover; ++ this._oldignoreHover = null; ++ this._box.sync_hover(); ++ if(Main.overview._shown) ++ this._pageChanged(); ++ }, ++ ++ _pageChanged: function() { ++ ++ let activePage = Main.overview.viewSelector.getActivePage(); ++ let dashVisible = (activePage == ViewSelector.ViewPage.WINDOWS || ++ activePage == ViewSelector.ViewPage.APPS); ++ ++ if(dashVisible){ ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ } else { ++ this._animateOut(this._settings.get_double('animation-time'), 0); ++ } ++ }, ++ ++ _onPageEmpty: function() { ++ /* The dash spacer is required only in the WINDOWS view if in the default position. ++ * The 'page-empty' signal is emitted in between a change of view, ++ * signalling the spacer can be added and removed without visible effect, ++ * as it's done for the upstream dashSpacer. ++ * ++ * Moreover, hiding the spacer ensure the appGrid allocaton is triggered. ++ * This matter as the appview spring animation is triggered by to first reallocaton of the appGrid, ++ * (See appDisplay.js, line 202 on GNOME Shell 3.14: ++ * this._grid.actor.connect('notify::allocation', ...) ++ * which in turn seems to be triggered by changes in the other actors in the overview. ++ * Normally, as far as I could understand, either the dashSpacer being hidden or the workspacesThumbnails ++ * sliding out would trigger the allocation. However, with no stock dash ++ * and no thumbnails, which happen if the user configured only 1 and static workspace, ++ * the animation out of icons is not played. ++ */ ++ ++ let activePage = Main.overview.viewSelector.getActivePage(); ++ this._dashSpacer.visible = (this._isHorizontal || activePage == ViewSelector.ViewPage.WINDOWS); ++ }, ++ ++ // Show dock and give key focus to it ++ _onAccessibilityFocus: function(){ ++ this._box.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); ++ this._animateIn(this._settings.get_double('animation-time'), 0); ++ }, ++ ++ _onShowAppsButtonToggled: function() { ++ ++ // Sync the status of the default appButtons. Only if the two statuses are ++ // different, that means the user interacted with the extension provided ++ // application button, cutomize the behaviour. Otherwise the shell has changed the ++ // status (due to the _syncShowAppsButtonToggled function below) and it ++ // has already performed the desired action. ++ ++ let selector = Main.overview.viewSelector; ++ ++ if(selector._showAppsButton.checked !== this.dash.showAppsButton.checked){ ++ ++ // find visible view ++ let visibleView; ++ Main.overview.viewSelector.appDisplay._views.every(function(v, index) { ++ if (v.view.actor.visible) { ++ visibleView = index; ++ return false; ++ } else { ++ return true; ++ } ++ }); ++ ++ if(this.dash.showAppsButton.checked){ ++ // force entering overview if needed ++ if (!Main.overview._shown) { ++ ++ let view = Main.overview.viewSelector.appDisplay._views[visibleView].view; ++ let grid = view._grid; ++ ++ // Animate in the the appview, hide the appGrid to avoiud flashing ++ // Go to the appView before entering the overview, skipping the workspaces. ++ // Do this manually avoiding opacity in transitions so that the setting of the opacity ++ // to 0 doesn't get overwritten. ++ Main.overview.viewSelector._activePage.opacity = 0; ++ Main.overview.viewSelector._activePage.hide(); ++ Main.overview.viewSelector._activePage = Main.overview.viewSelector._appsPage; ++ Main.overview.viewSelector._activePage.show(); ++ grid.actor.opacity = 0; ++ selector._showAppsButton.checked = true; ++ ++ // The animation has to be trigered manually because the AppDisplay.animate ++ // method is waiting for an allocation not happening, as we skip the workspace view ++ // and the appgrid could already be allocated from previous shown. ++ // It has to be triggered after the overview is shown as wrong coordinates are obtained ++ // otherwise. ++ let overviewShownId = Main.overview.connect('shown', Lang.bind(this, function(){ ++ Main.overview.disconnect(overviewShownId); ++ Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { ++ grid.actor.opacity = 255; ++ grid.animateSpring(IconGrid.AnimationDirection.IN, this.dash.showAppsButton); ++ })); ++ })); ++ ++ // Finally show the overview ++ Main.overview.show(); ++ this.forcedOverview = true; ++ } else { ++ selector._showAppsButton.checked = true; ++ } ++ } else { ++ if (this.forcedOverview) { ++ // force exiting overview if needed ++ ++ // Manually trigger springout animation without activating the ++ // workspaceView to avoid the zoomout animation. Hide the appPage ++ // onComplete to avoid ugly flashing of original icons. ++ let view = Main.overview.viewSelector.appDisplay._views[visibleView].view; ++ let grid = view._grid; ++ view.animate(IconGrid.AnimationDirection.OUT, Lang.bind(this, function(){ ++ Main.overview.viewSelector._appsPage.hide(); ++ Main.overview.hide(); ++ selector._showAppsButton.checked = false; ++ this.forcedOverview = false; ++ })); ++ ++ } else { ++ selector._showAppsButton.checked = false; ++ } ++ ++ } ++ } ++ ++ // whenever the button is unactivated even if not by the user still reset the ++ // forcedOverview flag ++ if( this.dash.showAppsButton.checked==false) ++ this.forcedOverview = false; ++ }, ++ ++ // Keep ShowAppsButton status in sync with the overview status ++ _syncShowAppsButtonToggled: function() { ++ let status = Main.overview.viewSelector._showAppsButton.checked; ++ if(this.dash.showAppsButton.checked !== status) ++ this.dash.showAppsButton.checked = status; ++ }, ++ ++ // Optional features enable/disable ++ ++ // Switch workspace by scrolling over the dock ++ _optionalScrollWorkspaceSwitch: function() { ++ ++ let label = 'optionalScrollWorkspaceSwitch'; ++ ++ this._settings.connect('changed::scroll-switch-workspace',Lang.bind(this, function(){ ++ if(this._settings.get_boolean('scroll-switch-workspace')) ++ Lang.bind(this, enable)(); ++ else ++ Lang.bind(this, disable)(); ++ })); ++ ++ if(this._settings.get_boolean('scroll-switch-workspace')) ++ Lang.bind(this, enable)(); ++ ++ function enable(){ ++ ++ this._signalsHandler.removeWithLabel(label); ++ ++ this._signalsHandler.addWithLabel(label, ++ [ ++ this._box, ++ 'scroll-event', ++ Lang.bind(this, onScrollEvent) ++ ] ++ ); ++ ++ this._optionalScrollWorkspaceSwitchDeadTimeId=0; ++ } ++ ++ function disable() { ++ this._signalsHandler.removeWithLabel(label); ++ ++ if(this._optionalScrollWorkspaceSwitchDeadTimeId>0){ ++ Mainloop.source_remove(this._optionalScrollWorkspaceSwitchDeadTimeId); ++ this._optionalScrollWorkspaceSwitchDeadTimeId=0; ++ } ++ } ++ ++ // This was inspired to desktop-scroller@obsidien.github.com ++ function onScrollEvent(actor, event) { ++ ++ // When in overview change workscape only in windows view ++ if (Main.overview.visible && Main.overview.viewSelector.getActivePage() !== ViewSelector.ViewPage.WINDOWS) ++ return false; ++ ++ let activeWs = global.screen.get_active_workspace(); ++ let direction = null; ++ ++ switch ( event.get_scroll_direction() ) { ++ case Clutter.ScrollDirection.UP: ++ direction = Meta.MotionDirection.UP; ++ break; ++ case Clutter.ScrollDirection.DOWN: ++ direction = Meta.MotionDirection.DOWN; ++ break; ++ case Clutter.ScrollDirection.SMOOTH: ++ let [dx, dy] = event.get_scroll_delta(); ++ if(dy < 0){ ++ direction = Meta.MotionDirection.UP; ++ } else if(dy > 0) { ++ direction = Meta.MotionDirection.DOWN; ++ } ++ break; ++ } ++ ++ if(direction !==null ){ ++ ++ // Prevent scroll events from triggering too many workspace switches ++ // by adding a 250ms deadtime between each scroll event. ++ // Usefull on laptops when using a touchpad. ++ ++ // During the deadtime do nothing ++ if(this._optionalScrollWorkspaceSwitchDeadTimeId>0) ++ return false; ++ else { ++ this._optionalScrollWorkspaceSwitchDeadTimeId = ++ Mainloop.timeout_add(250, ++ Lang.bind(this, function() { ++ this._optionalScrollWorkspaceSwitchDeadTimeId=0; ++ } ++ )); ++ } ++ ++ ++ let ws; ++ ++ ws = activeWs.get_neighbor(direction) ++ ++ if (Main.wm._workspaceSwitcherPopup == null) ++ Main.wm._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup(); ++ // Set the actor non reactive, so that it doesn't prevent the ++ // clicks events from reaching the dash actor. I can't see a reason ++ // why it should be reactive. ++ Main.wm._workspaceSwitcherPopup.actor.reactive = false; ++ Main.wm._workspaceSwitcherPopup.connect('destroy', function() { ++ Main.wm._workspaceSwitcherPopup = null; ++ }); ++ ++ // Do not show wokspaceSwithcer in overview ++ if(!Main.overview.visible) ++ Main.wm._workspaceSwitcherPopup.display(direction, ws.index()); ++ Main.wm.actionMoveWorkspace(ws); ++ ++ return true; ++ ++ } else { ++ return false; ++ } ++ } ++ ++ }, ++ ++ // Makes the message not being triggered by mouse. SOURCE: insensitive-tray extension. ++ _updateInsensitiveTray: function() { ++ ++ let insensitive = this._settings.get_boolean('insensitive-message-tray'); ++ ++ if("_trayPressure" in LayoutManager) { ++ // Systems supporting pressure ++ if (insensitive) { ++ LayoutManager._trayPressure._keybindingMode = null; ++ } else { ++ LayoutManager._trayPressure._keybindingMode = Shell.KeyBindingMode.NORMAL ++ | Shell.KeyBindingMode.OVERVIEW; ++ } ++ } else { ++ //systems using the old dwell mechanism ++ if (insensitive) { ++ this._injectionsHandler.addWithLabel('insensitive-message-tray', ++ [ ++ Main.messageTray, ++ '_trayDwellTimeout', ++ function() { return false; } ++ ] ++ ); ++ } else { ++ this._injectionsHandler.removeWithLabel('insensitive-message-tray') ++ } ++ } ++ } ++}); ++Signals.addSignalMethods(dockedDash.prototype); ++ ++/* ++ * Manage theme customization and custom theme support ++*/ ++const themeManager = new Lang.Class({ ++ Name: 'ThemeManager', ++ ++ _init: function(settings, actor, dash) { ++ ++ this._settings = settings; ++ this._bindSettingsChanges(); ++ this._actor = actor; ++ this._dash = dash; ++ ++ // initialize colors with generic values ++ this._defaultBackground = {red: 0, green:0, blue: 0, alpha:0}; ++ this._defaultBackgroundColor = {red: 0, green:0, blue: 0, alpha:0}; ++ this._customizedBackground = {red: 0, green:0, blue: 0, alpha:0}; ++ ++ this._signalsHandler = new Convenience.GlobalSignalsHandler(); ++ this._signalsHandler.add( ++ // When theme changes re-obtain default background color ++ [ ++ St.ThemeContext.get_for_stage (global.stage), ++ 'changed', ++ Lang.bind(this, this.updateCustomTheme) ++ ], ++ // update :overview pseudoclass ++ [ ++ Main.overview, ++ 'showing', ++ Lang.bind(this, this._onOverviewShowing) ++ ], ++ [ ++ Main.overview, ++ 'hiding', ++ Lang.bind(this, this._onOverviewHiding) ++ ] ++ ); ++ ++ this._updateCustomStyleClasses(); ++ ++ }, ++ ++ destroy: function() { ++ this._signalsHandler.destroy(); ++ }, ++ ++ _onOverviewShowing: function() { ++ this._actor.add_style_pseudo_class('overview'); ++ }, ++ ++ _onOverviewHiding: function() { ++ this._actor.remove_style_pseudo_class('overview'); ++ }, ++ ++ _updateBackgroundOpacity: function() { ++ ++ let newAlpha = this._settings.get_double('background-opacity'); ++ ++ this._defaultBackground = 'rgba('+ ++ this._defaultBackgroundColor.red + ','+ ++ this._defaultBackgroundColor.green + ','+ ++ this._defaultBackgroundColor.blue + ','+ ++ Math.round(this._defaultBackgroundColor.alpha/2.55)/100 + ')'; ++ ++ this._customizedBackground = 'rgba('+ ++ this._defaultBackgroundColor.red + ','+ ++ this._defaultBackgroundColor.green + ','+ ++ this._defaultBackgroundColor.blue + ','+ ++ newAlpha + ')'; ++ }, ++ ++ _getBackgroundColor: function() { ++ ++ // Prevent shell crash if the actor is not on the stage. ++ // It happens enabling/disabling repeatedly the extension ++ if(!this._dash._container.get_stage()) ++ return; ++ ++ // Remove custom style ++ let oldStyle = this._dash._container.get_style(); ++ this._dash._container.set_style(null); ++ ++ let themeNode = this._dash._container.get_theme_node(); ++ this._dash._container.set_style(oldStyle); ++ ++ this._defaultBackgroundColor = themeNode.get_background_color(); ++ }, ++ ++ _updateCustomStyleClasses: function(){ ++ ++ if (this._settings.get_boolean('apply-custom-theme')) ++ this._actor.add_style_class_name('dashtodock'); ++ else { ++ this._actor.remove_style_class_name('dashtodock'); ++ } ++ ++ if (this._settings.get_boolean('custom-theme-shrink')) ++ this._actor.add_style_class_name('shrink'); ++ else { ++ this._actor.remove_style_class_name('shrink'); ++ } ++ ++ if (this._settings.get_boolean('custom-theme-running-dots')) ++ this._actor.add_style_class_name('running-dots'); ++ else { ++ this._actor.remove_style_class_name('running-dots'); ++ } ++ ++ }, ++ ++ updateCustomTheme: function() { ++ this._updateCustomStyleClasses(); ++ this._getBackgroundColor(); ++ this._updateBackgroundOpacity(); ++ this._adjustTheme(); ++ this._dash._redisplay(); ++ }, ++ ++ /* Reimported back and adapted from atomdock */ ++ _adjustTheme: function() { ++ // Prevent shell crash if the actor is not on the stage. ++ // It happens enabling/disabling repeatedly the extension ++ if (!this._dash._container.get_stage()) { ++ return; ++ } ++ ++ // Remove prior style edits ++ this._dash._container.set_style(null); ++ ++ /* If built-in theme is enabled do nothing else */ ++ if( this._settings.get_boolean('apply-custom-theme') ) ++ return; ++ ++ let newStyle = ''; ++ let position = getPosition(this._settings); ++ ++ if ( ! this._settings.get_boolean('custom-theme-shrink') ) { ++ ++ // obtain theme border settings ++ let themeNode = this._dash._container.get_theme_node(); ++ let borderColor = themeNode.get_border_color(St.Side.TOP); ++ let borderWidth = themeNode.get_border_width(St.Side.TOP); ++ let borderRadius = themeNode.get_border_radius(St.Corner.TOPRIGHT); ++ ++ /* We're copying border and corner styles to left border and top-left ++ * corner, also removing bottom border and bottom-right corner styles ++ */ ++ let borderInner = ''; ++ let borderRadiusValue = ''; ++ let borderMissingStyle = ''; ++ ++ if (this._rtl && position != St.Side.RIGHT) { ++ borderMissingStyle = 'border-right: ' + borderWidth + 'px solid ' + ++ borderColor.to_string() + ';'; ++ } else if (!this._rtl && position != St.Side.LEFT){ ++ borderMissingStyle = 'border-left: ' + borderWidth + 'px solid ' + ++ borderColor.to_string() + ';'; ++ } ++ ++ switch(position) { ++ case St.Side.LEFT: ++ borderInner = 'border-left'; ++ borderRadiusValue = '0 ' + borderRadius + 'px ' + borderRadius + 'px 0;'; ++ break; ++ case St.Side.RIGHT: ++ borderInner = 'border-right'; ++ borderRadiusValue = borderRadius + 'px 0 0 ' + borderRadius + 'px;'; ++ break; ++ case St.Side.TOP: ++ borderInner = 'border-top'; ++ borderRadiusValue = '0 0 ' + borderRadius + 'px ' + borderRadius + 'px;'; ++ break; ++ case St.Side.BOTTOM: ++ borderInner = 'border-bottom'; ++ borderRadiusValue = borderRadius + 'px ' + borderRadius + 'px 0 0;'; ++ break; ++ } ++ ++ newStyle = borderInner + ': none;' + ++ 'border-radius: ' + borderRadiusValue + ++ borderMissingStyle ; ++ ++ /* I do call set_style possibly twice so that only the background gets the transition. ++ * The transition-property css rules seems to be unsupported ++ */ ++ this._dash._container.set_style(newStyle); ++ } ++ ++ /* Customize background */ ++ if ( this._settings.get_boolean('opaque-background') ) { ++ newStyle = newStyle + 'background-color:'+ this._customizedBackground + '; ' + ++ 'transition-delay: 0s; transition-duration: 0.250s;'; ++ this._dash._container.set_style(newStyle); ++ } ++ }, ++ ++ _bindSettingsChanges: function() { ++ ++ let keys = ['opaque-background', ++ 'background-opacity', ++ 'apply-custom-theme', ++ 'custom-theme-shrink', ++ 'custom-theme-running-dots', ++ 'extend-height']; ++ ++ keys.forEach(function(key){ ++ this._settings.connect('changed::'+key, ++ Lang.bind(this, this.updateCustomTheme) ++ ); ++ }, this ); ++ ++ } ++}); ++ ++ ++/* ++ * Manually check if mouse "can be" hover from the mouse position. The hover porperty ++ * is not reliable when focus move from the clutter actors to the the windows, giving a false ++ * positive hover status. If the mouse pointer is not in the right position I can be sure ++ * that the hover has to be false. ++*/ ++function isMouseHover(actor) { ++ let [pointerX, pointerY, mods] = global.get_pointer(); ++ ++ let [x, y] = actor.get_transformed_position(); ++ let [width, height] =actor.get_transformed_size(); ++ ++ let test = (pointerX < x + width) && ++ (pointerX > x) && ++ (pointerY < y + height) && ++ (pointerY > y); ++ ++ return test; ++} +diff --git a/extensions/dash-to-dock/extension.js b/extensions/dash-to-dock/extension.js +new file mode 100644 +index 0000000..4bd19fa +--- /dev/null ++++ b/extensions/dash-to-dock/extension.js +@@ -0,0 +1,52 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Convenience = Me.imports.convenience; ++const DockedDash = Me.imports.dockedDash; ++ ++const Main = imports.ui.main; ++ ++let settings; ++let dock; ++ ++let oldDash; ++ ++function init() { ++ ++} ++ ++function enable() { ++ ++ settings = Convenience.getSettings('org.gnome.shell.extensions.dash-to-dock'); ++ dock = new DockedDash.dockedDash(settings); ++ ++ /* Pretend I'm the dash: meant to make appgrd swarm animation come from the ++ * right position of the appShowButton. ++ */ ++ oldDash = Main.overview._dash; ++ Main.overview._dash = dock.dash; ++ bindSettingsChanges(); ++} ++ ++function disable() { ++ dock.destroy(); ++ settings.run_dispose(); ++ Main.overview._dash = oldDash; ++ ++ dock=null; ++ settings = null; ++ oldDash=null; ++} ++ ++ ++function bindSettingsChanges() { ++ // This settings change require a full reload. ++ ++ /* It's easier to just reload the extension when the dock position changes ++ * rather than working out all changes to the differen containers. ++ */ ++ settings.connect('changed::dock-position', function(){ ++ disable(); ++ enable(); ++ }); ++} +diff --git a/extensions/dash-to-dock/intellihide.js b/extensions/dash-to-dock/intellihide.js +new file mode 100644 +index 0000000..0c79cee +--- /dev/null ++++ b/extensions/dash-to-dock/intellihide.js +@@ -0,0 +1,278 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Lang = imports.lang; ++const Mainloop = imports.mainloop; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++ ++const Main = imports.ui.main; ++const Signals = imports.signals; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Convenience = Me.imports.myConvenience; ++ ++// A good compromise between reactivity and efficiency; to be tuned. ++const INTELLIHIDE_CHECK_INTERVAL = 100; ++ ++const OverlapStatus = { ++ UNDEFINED: -1, ++ FALSE: 0, ++ TRUE: 1 ++}; ++ ++// List of windows type taken into account. Order is important (keep the original ++// enum order). ++const handledWindowTypes = [ ++ Meta.WindowType.NORMAL, ++ Meta.WindowType.DIALOG, ++ Meta.WindowType.MODAL_DIALOG, ++ Meta.WindowType.TOOLBAR, ++ Meta.WindowType.MENU, ++ Meta.WindowType.UTILITY, ++ Meta.WindowType.SPLASHSCREEN ++]; ++ ++/* ++ * A rough and ugly implementation of the intellihide behaviour. ++ * Intallihide object: emit 'status-changed' signal when the overlap of windows ++ * with the provided targetBoxClutter.ActorBox changes; ++ * ++*/ ++ ++const intellihide = new Lang.Class({ ++ Name: 'Intellihide', ++ ++ _init: function(settings) { ++ ++ // Load settings ++ this._settings = settings; ++ ++ this._signalsHandler = new Convenience.GlobalSignalsHandler(); ++ this._tracker = Shell.WindowTracker.get_default(); ++ this._focusApp = null; ++ ++ this._isEnabled = false; ++ this.status = OverlapStatus.UNDEFINED; ++ this._targetBox = null; ++ ++ // Main id of the timeout controlling timeout for updateDockVisibility function ++ // when windows are dragged around (move and resize) ++ this._windowChangedTimeout = 0; ++ ++ // Connect global signals ++ this._signalsHandler.add ( ++ // Add timeout when window grab-operation begins and remove it when it ends. ++ [ ++ global.display, ++ 'grab-op-begin', ++ Lang.bind(this, this._grabOpBegin) ++ ], ++ [ ++ global.display, ++ 'grab-op-end', ++ Lang.bind(this, this._grabOpEnd) ++ ], ++ // direct maximize/unmazimize are not included in grab-operations ++ [ ++ global.window_manager, ++ 'maximize', ++ Lang.bind(this, this._checkOverlap ) ++ ], ++ [ ++ global.window_manager, ++ 'unmaximize', ++ Lang.bind(this, this._checkOverlap ) ++ ], ++ // triggered for instance when the window list order changes, ++ // included when the workspace is switched ++ [ ++ global.screen, ++ 'restacked', ++ Lang.bind(this, this._checkOverlap) ++ ], ++ // update wne monitor changes, for instance in multimonitor when monitor are attached ++ [ ++ global.screen, ++ 'monitors-changed', ++ Lang.bind(this, this._checkOverlap ) ++ ] ++ ); ++ ++ }, ++ ++ destroy: function() { ++ ++ // Disconnect global signals ++ this._signalsHandler.destroy(); ++ ++ if(this._windowChangedTimeout>0) ++ Mainloop.source_remove(this._windowChangedTimeout); // Just to be sure ++ this._windowChangedTimeout=0; ++ }, ++ ++ enable: function() { ++ ++ this._isEnabled = true; ++ this._status = OverlapStatus.UNDEFINED; ++ this._checkOverlap(); ++ }, ++ ++ disable: function() { ++ this._isEnabled = false; ++ if(this._windowChangedTimeout>0) ++ Mainloop.source_remove(this._windowChangedTimeout); ++ this._windowChangedTimeout = 0; ++ }, ++ ++ updateTargetBox: function(box) { ++ this._targetBox = box; ++ this._checkOverlap(); ++ }, ++ ++ forceUpdate: function() { ++ this._status = OverlapStatus.UNDEFINED; ++ this._checkOverlap(); ++ }, ++ ++ getOverlapStatus: function(){ ++ if(this._status == OverlapStatus.TRUE) ++ return true; ++ else ++ return false; ++ }, ++ ++ _grabOpBegin: function() { ++ if(this._isEnabled){ ++ if(this._windowChangedTimeout>0) ++ Mainloop.source_remove(this._windowChangedTimeout); // Just to be sure ++ ++ this._windowChangedTimeout = Mainloop.timeout_add(INTELLIHIDE_CHECK_INTERVAL, ++ Lang.bind(this, function(){ ++ this._checkOverlap(); ++ return true; // to make the loop continue ++ }) ++ ); ++ } ++ }, ++ ++ _grabOpEnd: function() { ++ ++ if(this._windowChangedTimeout>0) ++ Mainloop.source_remove(this._windowChangedTimeout); ++ ++ this._windowChangedTimeout=0; ++ this._checkOverlap(); ++ }, ++ ++ _checkOverlap: function() { ++ ++ if( !this._isEnabled || this._targetBox == null) ++ return; ++ ++ let overlaps = OverlapStatus.FALSE; ++ let windows = global.get_window_actors(); ++ ++ if (windows.length>0){ ++ ++ // This is the window on top of all others in the current workspace ++ let topWindow = windows[windows.length-1].get_meta_window(); ++ // If there isn't a focused app, use that of the window on top ++ this._focusApp = this._tracker.focus_app || this._tracker.get_window_app(topWindow); ++ ++ windows = windows.filter(this._intellihideFilterInteresting, this); ++ ++ for(let i=0; i< windows.length; i++){ ++ ++ let win = windows[i].get_meta_window(); ++ if(win){ ++ let rect = win.get_outer_rect(); ++ ++ let test = ( rect.x < this._targetBox.x2) && ++ ( rect.x +rect.width > this._targetBox.x1 ) && ++ ( rect.y < this._targetBox.y2 ) && ++ ( rect.y +rect.height > this._targetBox.y1 ); ++ ++ if(test){ ++ overlaps = OverlapStatus.TRUE; ++ break; ++ } ++ } ++ } ++ } ++ ++ if ( this._status !== overlaps ) { ++ this._status = overlaps; ++ this.emit('status-changed', this._status); ++ } ++ ++ }, ++ ++ // Filter interesting windows to be considered for intellihide. ++ // Consider all windows visible on the current workspace. ++ // Optionally skip windows of other applications ++ _intellihideFilterInteresting: function(wa){ ++ ++ var currentWorkspace = global.screen.get_active_workspace_index(); ++ ++ var meta_win = wa.get_meta_window(); ++ if (!meta_win) { ++ return false; ++ } ++ ++ if ( !this._handledWindow(meta_win) ) ++ return false; ++ ++ var wksp = meta_win.get_workspace(); ++ var wksp_index = wksp.index(); ++ ++ // Skip windows of other apps ++ if(this._focusApp && this._settings.get_boolean('intellihide-perapp')) { ++ // The DropDownTerminal extension is not an application per se ++ // so we match its window by wm class instead ++ if (meta_win.get_wm_class() == 'DropDownTerminalWindow') ++ return true; ++ ++ let currentApp = this._tracker.get_window_app(meta_win); ++ ++ // But consider half maximized windows ( Useful if one is using ++ // two apps side by side and windows which are alwayson top ++ if( this._focusApp != currentApp ++ && !(meta_win.maximized_vertically && !meta_win.maximized_horizontally) ++ && !meta_win.is_above() ++ ) { ++ return false; ++ } ++ } ++ ++ if ( wksp_index == currentWorkspace && meta_win.showing_on_its_workspace() ) { ++ return true; ++ } else { ++ return false; ++ } ++ ++ }, ++ ++ // Filter windows by type ++ // inspired by Opacify@gnome-shell.localdomain.pl ++ _handledWindow: function(metaWindow) { ++ // The DropDownTerminal extension uses the POPUP_MENU window type hint ++ // so we match its window by wm class instead ++ if (metaWindow.get_wm_class() == 'DropDownTerminalWindow') ++ return true; ++ ++ var wtype = metaWindow.get_window_type(); ++ for (var i = 0; i < handledWindowTypes.length; i++) { ++ var hwtype = handledWindowTypes[i]; ++ if (hwtype == wtype) { ++ return true; ++ } else if (hwtype > wtype) { ++ return false; ++ } ++ } ++ return false; ++ ++ } ++ ++}); ++ ++Signals.addSignalMethods(intellihide.prototype); +diff --git a/extensions/dash-to-dock/media/four.svg b/extensions/dash-to-dock/media/four.svg +new file mode 100644 +index 0000000..8653206 +--- /dev/null ++++ b/extensions/dash-to-dock/media/four.svg +@@ -0,0 +1,132 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/four_bottom.svg b/extensions/dash-to-dock/media/four_bottom.svg +new file mode 100644 +index 0000000..3fc4cb2 +--- /dev/null ++++ b/extensions/dash-to-dock/media/four_bottom.svg +@@ -0,0 +1,133 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/four_rtl.svg b/extensions/dash-to-dock/media/four_rtl.svg +new file mode 100644 +index 0000000..67dcf28 +--- /dev/null ++++ b/extensions/dash-to-dock/media/four_rtl.svg +@@ -0,0 +1,133 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/four_top.svg b/extensions/dash-to-dock/media/four_top.svg +new file mode 100644 +index 0000000..1b3dfcb +--- /dev/null ++++ b/extensions/dash-to-dock/media/four_top.svg +@@ -0,0 +1,133 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/logo.svg b/extensions/dash-to-dock/media/logo.svg +new file mode 100644 +index 0000000..509d2e5 +--- /dev/null ++++ b/extensions/dash-to-dock/media/logo.svg +@@ -0,0 +1,561 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Dash to Dock ++ Michele ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/one.svg b/extensions/dash-to-dock/media/one.svg +new file mode 100644 +index 0000000..0582b88 +--- /dev/null ++++ b/extensions/dash-to-dock/media/one.svg +@@ -0,0 +1,107 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/one_bottom.svg b/extensions/dash-to-dock/media/one_bottom.svg +new file mode 100644 +index 0000000..ebbaf33 +--- /dev/null ++++ b/extensions/dash-to-dock/media/one_bottom.svg +@@ -0,0 +1,108 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/one_rtl.svg b/extensions/dash-to-dock/media/one_rtl.svg +new file mode 100644 +index 0000000..8f4813e +--- /dev/null ++++ b/extensions/dash-to-dock/media/one_rtl.svg +@@ -0,0 +1,108 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/one_top.svg b/extensions/dash-to-dock/media/one_top.svg +new file mode 100644 +index 0000000..d771e3a +--- /dev/null ++++ b/extensions/dash-to-dock/media/one_top.svg +@@ -0,0 +1,108 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/three.svg b/extensions/dash-to-dock/media/three.svg +new file mode 100644 +index 0000000..5d908d6 +--- /dev/null ++++ b/extensions/dash-to-dock/media/three.svg +@@ -0,0 +1,121 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/three_bottom.svg b/extensions/dash-to-dock/media/three_bottom.svg +new file mode 100644 +index 0000000..30d0ede +--- /dev/null ++++ b/extensions/dash-to-dock/media/three_bottom.svg +@@ -0,0 +1,122 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/three_rtl.svg b/extensions/dash-to-dock/media/three_rtl.svg +new file mode 100644 +index 0000000..f4c2722 +--- /dev/null ++++ b/extensions/dash-to-dock/media/three_rtl.svg +@@ -0,0 +1,122 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/three_top.svg b/extensions/dash-to-dock/media/three_top.svg +new file mode 100644 +index 0000000..2fca42c +--- /dev/null ++++ b/extensions/dash-to-dock/media/three_top.svg +@@ -0,0 +1,122 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/two.svg b/extensions/dash-to-dock/media/two.svg +new file mode 100644 +index 0000000..4565f34 +--- /dev/null ++++ b/extensions/dash-to-dock/media/two.svg +@@ -0,0 +1,118 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/two_bottom.svg b/extensions/dash-to-dock/media/two_bottom.svg +new file mode 100644 +index 0000000..83e6251 +--- /dev/null ++++ b/extensions/dash-to-dock/media/two_bottom.svg +@@ -0,0 +1,119 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/two_rtl.svg b/extensions/dash-to-dock/media/two_rtl.svg +new file mode 100644 +index 0000000..e6f1159 +--- /dev/null ++++ b/extensions/dash-to-dock/media/two_rtl.svg +@@ -0,0 +1,119 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/media/two_top.svg b/extensions/dash-to-dock/media/two_top.svg +new file mode 100644 +index 0000000..4bf86a5 +--- /dev/null ++++ b/extensions/dash-to-dock/media/two_top.svg +@@ -0,0 +1,119 @@ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/extensions/dash-to-dock/metadata.json.in b/extensions/dash-to-dock/metadata.json.in +new file mode 100644 +index 0000000..a090272 +--- /dev/null ++++ b/extensions/dash-to-dock/metadata.json.in +@@ -0,0 +1,12 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"original-author": "micxgx@gmail.com", ++"name": "Dash to Dock", ++"description": "A dock for the Gnome Shell. This extension moves the dash out of the overview transforming it in a dock for an easier launching of applications and a faster switching between windows and desktops. Side and bottom placement options are available.", ++"shell-version": [ "@shell_current@" ], ++"version": 45, ++"url": "https://micheleg.github.io/dash-to-dock/" ++} +diff --git a/extensions/dash-to-dock/myConvenience.js b/extensions/dash-to-dock/myConvenience.js +new file mode 100644 +index 0000000..39223a6 +--- /dev/null ++++ b/extensions/dash-to-dock/myConvenience.js +@@ -0,0 +1,103 @@ ++const Lang = imports.lang; ++ ++// simplify global signals and function injections handling ++// abstract class ++const BasicHandler = new Lang.Class({ ++ Name: 'dashToDock.BasicHandler', ++ ++ _init: function(){ ++ this._storage = new Object(); ++ }, ++ ++ add: function(/*unlimited 3-long array arguments*/){ ++ ++ // convert arguments object to array, concatenate with generic ++ let args = Array.concat('generic', Array.slice(arguments)); ++ // call addWithLabel with ags as if they were passed arguments ++ this.addWithLabel.apply(this, args); ++ }, ++ ++ destroy: function() { ++ for( let label in this._storage ) ++ this.removeWithLabel(label); ++ }, ++ ++ addWithLabel: function( label /* plus unlimited 3-long array arguments*/) { ++ ++ if(this._storage[label] == undefined) ++ this._storage[label] = new Array(); ++ ++ // skip first element of the arguments ++ for( let i = 1; i < arguments.length; i++ ) { ++ this._storage[label].push( this._create(arguments[i]) ); ++ } ++ ++ }, ++ ++ removeWithLabel: function(label){ ++ ++ if(this._storage[label]) { ++ for( let i = 0; i < this._storage[label].length; i++ ) { ++ this._remove(this._storage[label][i]); ++ } ++ ++ delete this._storage[label]; ++ } ++ }, ++ ++ /* Virtual methods to be implemented by subclass */ ++ // create single element to be stored in the storage structure ++ _create: function(item){ ++ throw new Error('no implementation of _create in ' + this); ++ }, ++ ++ // correctly delete single element ++ _remove: function(item){ ++ throw new Error('no implementation of _remove in ' + this); ++ } ++}); ++ ++// Manage global signals ++const GlobalSignalsHandler = new Lang.Class({ ++ Name: 'DashToDock.GlobalSignalHandler', ++ Extends: BasicHandler, ++ ++ _create: function(item) { ++ ++ let object = item[0]; ++ let event = item[1]; ++ let callback = item[2] ++ let id = object.connect(event, callback); ++ ++ return [object, id]; ++ }, ++ ++ _remove: function(item){ ++ item[0].disconnect(item[1]); ++ } ++}); ++ ++// Manage function injection: both instances and prototype can be overridden ++// and restored ++const InjectionsHandler = new Lang.Class({ ++ Name: 'DashToDock.InjectionsHandler', ++ Extends: BasicHandler, ++ ++ _create: function(item) { ++ ++ let object = item[0]; ++ let name = item[1]; ++ let injectedFunction = item[2]; ++ let original = object[name]; ++ ++ object[name] = injectedFunction; ++ return [object, name, injectedFunction, original]; ++ }, ++ ++ _remove: function(item) { ++ let object = item[0]; ++ let name = item[1]; ++ let original = item[3]; ++ object[name] = original; ++ } ++}); +diff --git a/extensions/dash-to-dock/myDash.js b/extensions/dash-to-dock/myDash.js +new file mode 100644 +index 0000000..d44a41c +--- /dev/null ++++ b/extensions/dash-to-dock/myDash.js +@@ -0,0 +1,1672 @@ ++// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- ++ ++const Clutter = imports.gi.Clutter; ++const GLib = imports.gi.GLib; ++const Gtk = imports.gi.Gtk; ++const Signals = imports.signals; ++const Lang = imports.lang; ++const Meta = imports.gi.Meta; ++const Shell = imports.gi.Shell; ++const St = imports.gi.St; ++const Mainloop = imports.mainloop; ++ ++const AppDisplay = imports.ui.appDisplay; ++const AppFavorites = imports.ui.appFavorites; ++const Dash = imports.ui.dash; ++const DND = imports.ui.dnd; ++const IconGrid = imports.ui.iconGrid; ++const Main = imports.ui.main; ++const PopupMenu = imports.ui.popupMenu; ++const Tweener = imports.ui.tweener; ++const Util = imports.misc.util; ++const Workspace = imports.ui.workspace; ++ ++const Me = imports.misc.extensionUtils.getCurrentExtension(); ++const Convenience = Me.imports.myConvenience; ++ ++let DASH_ANIMATION_TIME = Dash.DASH_ANIMATION_TIME; ++let DASH_ITEM_LABEL_SHOW_TIME = Dash.DASH_ITEM_LABEL_SHOW_TIME; ++let DASH_ITEM_LABEL_HIDE_TIME = Dash.DASH_ITEM_LABEL_HIDE_TIME; ++let DASH_ITEM_HOVER_TIMEOUT = Dash.DASH_ITEM_HOVER_TIMEOUT; ++ ++/* Return the actual position reverseing left and right in rtl */ ++function getPosition(settings) { ++ let position = settings.get_enum('dock-position'); ++ if(Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) { ++ if (position == St.Side.LEFT) ++ position = St.Side.RIGHT; ++ else if (position == St.Side.RIGHT) ++ position = St.Side.LEFT; ++ } ++ return position; ++} ++ ++/** ++ * Extend AppIconMenu ++ * ++ * - Pass settings to the constructor ++ * - set popup arrow side based on dash orientation ++ * - Add close windows option based on quitfromdash extension ++ * (https://github.com/deuill/shell-extension-quitfromdash) ++ */ ++ ++const myAppIconMenu = new Lang.Class({ ++ Name: 'myAppIconMenu', ++ Extends: AppDisplay.AppIconMenu, ++ ++ _init: function(source, settings) { ++ ++ let side = getPosition(settings); ++ ++ // Damm it, there has to be a proper way of doing this... ++ // As I can't call the parent parent constructor (?) passing the side ++ // parameter, I overwite what I need later ++ this.parent(source); ++ ++ // Change the initialized side where required. ++ this._arrowSide = side; ++ this._boxPointer._arrowSide = side; ++ this._boxPointer._userArrowSide = side; ++ }, ++ ++ // helper function for the quit windows abilities ++ _closeWindowInstance: function(metaWindow) { ++ metaWindow.delete(global.get_current_time()); ++ }, ++ ++ _redisplay: function() { ++ ++ this.parent(); ++ ++ // quit menu ++ let app = this._source.app; ++ let count = app.get_n_windows(); ++ if ( count > 0) { ++ this._appendSeparator(); ++ let quitFromDashMenuText = ""; ++ if (count == 1) ++ quitFromDashMenuText = _("Quit"); ++ else ++ quitFromDashMenuText = _("Quit " + count + " Windows"); ++ ++ this._quitfromDashMenuItem = this._appendMenuItem(quitFromDashMenuText); ++ this._quitfromDashMenuItem.connect('activate', Lang.bind(this, function() { ++ let app = this._source.app; ++ let windows = app.get_windows(); ++ for (let i = 0; i < windows.length; i++) { ++ this._closeWindowInstance(windows[i]) ++ } ++ })); ++ } ++ } ++}); ++ ++/** ++ * Extend DashItemContainer ++ * ++ * - Pass settings to the constructor ++ * - set label position based on dash orientation ++ * ++ * I can't subclass the original object because of this: https://bugzilla.gnome.org/show_bug.cgi?id=688973. ++ * thus use this ugly pattern. ++ */ ++ ++// define first this function to use it in both extendShowAppsIcon and extendDashItemContainer ++function ItemShowLabel() { ++ if (!this._labelText) { ++ return; ++ } ++ ++ this.label.set_text(this._labelText); ++ this.label.opacity = 0; ++ this.label.show(); ++ ++ let [stageX, stageY] = this.get_transformed_position(); ++ let node = this.label.get_theme_node(); ++ ++ let itemWidth = this.allocation.x2 - this.allocation.x1; ++ let itemHeight = this.allocation.y2 - this.allocation.y1; ++ ++ ++ let labelWidth = this.label.get_width(); ++ let labelHeight = this.label.get_height(); ++ ++ let x, y, xOffset, yOffset; ++ ++ let position = getPosition(this._settings); ++ this._isHorizontal = ( position == St.Side.TOP || ++ position == St.Side.BOTTOM); ++ let labelOffset = node.get_length('-x-offset'); ++ ++ switch(position) { ++ case St.Side.LEFT: ++ yOffset = Math.floor((itemHeight - labelHeight) / 2); ++ y = stageY + yOffset; ++ xOffset = labelOffset; ++ x = stageX + this.get_width() + xOffset; ++ break; ++ case St.Side.RIGHT: ++ yOffset = Math.floor((itemHeight - labelHeight) / 2); ++ y = stageY + yOffset; ++ xOffset = labelOffset; ++ x = Math.round(stageX) - labelWidth - xOffset; ++ break; ++ case St.Side.TOP: ++ y = stageY + labelOffset + itemHeight; ++ xOffset = Math.floor((itemWidth - labelWidth) / 2); ++ x = stageX + xOffset; ++ break; ++ case St.Side.BOTTOM: ++ yOffset = labelOffset; ++ y = stageY - labelHeight - yOffset; ++ xOffset = Math.floor((itemWidth - labelWidth) / 2); ++ x = stageX + xOffset; ++ break; ++ } ++ ++ // keep the label inside the screen border ++ // Only needed fot the x coordinate. ++ ++ // Leave a few pixel gap ++ let gap = 5; ++ let monitor = Main.layoutManager.findMonitorForActor(this); ++ if ( x - monitor.x monitor.x + monitor.width - gap) ++ x-= x + labelWidth -( monitor.x + monitor.width) + gap; ++ ++ this.label.set_position(x, y); ++ Tweener.addTween(this.label, ++ { opacity: 255, ++ time: DASH_ITEM_LABEL_SHOW_TIME, ++ transition: 'easeOutQuad', ++ }); ++}; ++ ++function extendDashItemContainer(dashItemContainer, settings) { ++ ++ dashItemContainer._settings = settings; ++ dashItemContainer.showLabel = ItemShowLabel; ++}; ++ ++/* ++ * A menu for the showAppsIcon ++*/ ++const myShowAppsIconMenu = new Lang.Class({ ++ ++ Name: 'dashToDockShowAppsIconMenu', ++ Extends: myAppIconMenu, ++ ++ _redisplay: function() { ++ this.removeAll(); ++ ++ let item = this._appendMenuItem(_("Dash to Dock Settings")); ++ ++ item.connect('activate', function () { ++ Util.spawn(["gnome-shell-extension-prefs", Me.metadata.uuid]); ++ }); ++ } ++ ++}); ++ ++/** ++ * Extend ShowAppsIcon ++ * ++ * - Pass settings to the constructor ++ * - set label position based on dash orientation ++ * - implement a popupMenu based on the AppIcon code ++ * ++ * I can't subclass the original object because of this: https://bugzilla.gnome.org/show_bug.cgi?id=688973. ++ * thus use this ugly pattern. ++ */ ++ ++function extendShowAppsIcon(showAppsIcon, settings){ ++ ++ ++ showAppsIcon._settings = settings; ++ /* the variable equivalent to toggleButton has a different name in the appIcon class ++ (actor): duplicate reference to easily reuse appIcon methods */ ++ showAppsIcon.actor = showAppsIcon.toggleButton; ++ ++ // Re-use appIcon methods ++ showAppsIcon._removeMenuTimeout = AppDisplay.AppIcon.prototype._removeMenuTimeout; ++ showAppsIcon._setPopupTimeout = AppDisplay.AppIcon.prototype._setPopupTimeout; ++ showAppsIcon._onButtonPress = AppDisplay.AppIcon.prototype._onButtonPress; ++ showAppsIcon._onKeyboardPopupMenu = AppDisplay.AppIcon.prototype._onKeyboardPopupMenu; ++ showAppsIcon._onLeaveEvent = AppDisplay.AppIcon.prototype._onLeaveEvent; ++ showAppsIcon._onTouchEvent = AppDisplay.AppIcon.prototype._onTouchEvent; ++ showAppsIcon._onMenuPoppedDown = AppDisplay.AppIcon.prototype._onMenuPoppedDown; ++ ++ ++ // No action on clicked (showing of the appsview is controlled elsewhere) ++ showAppsIcon._onClicked = function(actor, button) { ++ showAppsIcon._removeMenuTimeout(); ++ }; ++ ++ ++ showAppsIcon.actor.connect('leave-event', Lang.bind( showAppsIcon, showAppsIcon._onLeaveEvent)); ++ showAppsIcon.actor.connect('button-press-event', Lang.bind( showAppsIcon, showAppsIcon._onButtonPress)); ++ showAppsIcon.actor.connect('touch-event', Lang.bind( showAppsIcon, showAppsIcon._onTouchEvent)); ++ showAppsIcon.actor.connect('clicked', Lang.bind( showAppsIcon, showAppsIcon._onClicked)); ++ showAppsIcon.actor.connect('popup-menu', Lang.bind( showAppsIcon, showAppsIcon._onKeyboardPopupMenu)); ++ ++ showAppsIcon._menu = null; ++ showAppsIcon._menuManager = new PopupMenu.PopupMenuManager(showAppsIcon); ++ showAppsIcon._menuTimeoutId = 0; ++ ++ ++ showAppsIcon.showLabel = ItemShowLabel; ++ ++ ++ showAppsIcon.popupMenu = function() { ++ ++ showAppsIcon._removeMenuTimeout(); ++ showAppsIcon.actor.fake_release(); ++ ++ if (!showAppsIcon._menu) { ++ showAppsIcon._menu = new myShowAppsIconMenu(showAppsIcon, showAppsIcon._settings); ++ showAppsIcon._menu.connect('open-state-changed', Lang.bind(showAppsIcon, function (menu, isPoppedUp) { ++ if (!isPoppedUp) ++ showAppsIcon._onMenuPoppedDown(); ++ })); ++ let id = Main.overview.connect('hiding', Lang.bind(showAppsIcon, function () { showAppsIcon._menu.close(); })); ++ showAppsIcon._menu.actor.connect('destroy', function() { ++ Main.overview.disconnect(id); ++ }); ++ showAppsIcon._menuManager.addMenu(showAppsIcon._menu); ++ } ++ ++ showAppsIcon.emit('menu-state-changed', true); ++ ++ showAppsIcon.actor.set_hover(true); ++ showAppsIcon._menu.popup(); ++ showAppsIcon._menuManager.ignoreRelease(); ++ showAppsIcon.emit('sync-tooltip'); ++ ++ return false; ++ }; ++ ++ Signals.addSignalMethods(showAppsIcon); ++} ++ ++/* This class is a fork of the upstream DashActor class (ui.dash.js) ++ * ++ * Summary of changes: ++ * - passed settings to class as parameter ++ * - modified chldBox calculations for when 'show-apps-at-top' option is checked ++ * - handle horizontal dash ++ */ ++const myDashActor = new Lang.Class({ ++ Name: 'DashToDockmyDashActor', ++ ++ _init: function(settings) { ++ this._settings = settings; ++ this._rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL; ++ ++ this._position = getPosition(settings); ++ this._isHorizontal = ( this._position == St.Side.TOP || ++ this._position == St.Side.BOTTOM ); ++ ++ let layout = new Clutter.BoxLayout({ orientation: ++ this._isHorizontal?Clutter.Orientation.HORIZONTAL:Clutter.Orientation.VERTICAL }); ++ ++ this.actor = new Shell.GenericContainer({ name: 'dash', ++ layout_manager: layout, ++ clip_to_allocation: true }); ++ this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth)); ++ this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight)); ++ this.actor.connect('allocate', Lang.bind(this, this._allocate)); ++ ++ this.actor._delegate = this; ++ ++ }, ++ ++ _allocate: function(actor, box, flags) { ++ let contentBox = box; ++ let availWidth = contentBox.x2 - contentBox.x1; ++ let availHeight = contentBox.y2 - contentBox.y1; ++ ++ let [appIcons, showAppsButton] = actor.get_children(); ++ let [showAppsMinHeight, showAppsNatHeight] = showAppsButton.get_preferred_height(availWidth); ++ let [showAppsMinWidth, showAppsNatWidth] = showAppsButton.get_preferred_width(availHeight); ++ ++ let offset_x = this._isHorizontal?showAppsNatWidth:0; ++ let offset_y = this._isHorizontal?0:showAppsNatHeight; ++ ++ let childBox = new Clutter.ActorBox(); ++ if( (this._settings.get_boolean('show-apps-at-top') && !this._isHorizontal) ++ || (this._settings.get_boolean('show-apps-at-top') && !this._rtl) ++ || (!this._settings.get_boolean('show-apps-at-top') && this._isHorizontal && this._rtl) ++ ) { ++ childBox.x1 = contentBox.x1 + offset_x; ++ childBox.y1 = contentBox.y1 + offset_y; ++ childBox.x2 = contentBox.x2; ++ childBox.y2 = contentBox.y2; ++ appIcons.allocate(childBox, flags); ++ ++ childBox.y1 = contentBox.y1; ++ childBox.x1 = contentBox.x1; ++ childBox.x2 = contentBox.x1 + showAppsNatWidth; ++ childBox.y2 = contentBox.y1 + showAppsNatHeight; ++ showAppsButton.allocate(childBox, flags); ++ } else { ++ childBox.x1 = contentBox.x1; ++ childBox.y1 = contentBox.y1; ++ childBox.x2 = contentBox.x2 - offset_x; ++ childBox.y2 = contentBox.y2 - offset_y; ++ appIcons.allocate(childBox, flags); ++ ++ childBox.x2 = contentBox.x2; ++ childBox.y2 = contentBox.y2; ++ childBox.x1 = contentBox.x2 - showAppsNatWidth; ++ childBox.y1 = contentBox.y2 - showAppsNatHeight; ++ showAppsButton.allocate(childBox, flags); ++ } ++ }, ++ ++ _getPreferredWidth: function(actor, forHeight, alloc) { ++ // We want to request the natural height of all our children ++ // as our natural height, so we chain up to StWidget (which ++ // then calls BoxLayout), but we only request the showApps ++ // button as the minimum size ++ ++ let [, natWidth] = this.actor.layout_manager.get_preferred_width(this.actor, forHeight); ++ ++ let themeNode = this.actor.get_theme_node(); ++ let [, showAppsButton] = this.actor.get_children(); ++ let [minWidth, ] = showAppsButton.get_preferred_height(forHeight); ++ ++ alloc.min_size = minWidth; ++ alloc.natural_size = natWidth; ++ ++ }, ++ ++ _getPreferredHeight: function(actor, forWidth, alloc) { ++ // We want to request the natural height of all our children ++ // as our natural height, so we chain up to StWidget (which ++ // then calls BoxLayout), but we only request the showApps ++ // button as the minimum size ++ ++ let [, natHeight] = this.actor.layout_manager.get_preferred_height(this.actor, forWidth); ++ ++ let themeNode = this.actor.get_theme_node(); ++ let [, showAppsButton] = this.actor.get_children(); ++ let [minHeight, ] = showAppsButton.get_preferred_height(forWidth); ++ ++ alloc.min_size = minHeight; ++ alloc.natural_size = natHeight; ++ } ++}); ++ ++/* This class is a fork of the upstream dash class (ui.dash.js) ++ * ++ * Summary of changes: ++ * - disconnect global signals adding a destroy method; ++ * - play animations even when not in overview mode ++ * - set a maximum icon size ++ * - show running and/or favorite applications ++ * - emit a custom signal when an app icon is added ++ * - hide showApps label when the custom menu is shown. ++ * - add cleanUpLabels method emitting a signal to hide labels ++ * - Add scrollview ++ * Ensure actor is visible on keyfocus inseid the scrollview ++ * - add 128px icon size, might be usefull for hidpi display ++ * - Sync minimization application target position. ++ */ ++ ++const baseIconSizes = [ 16, 22, 24, 32, 48, 64, 96, 128 ]; ++ ++const myDash = new Lang.Class({ ++ Name: 'dashToDock.myDash', ++ ++ _init : function(settings) { ++ this._maxHeight = -1; ++ this.iconSize = 64; ++ this._availableIconSizes = baseIconSizes; ++ this._shownInitially = false; ++ ++ this._settings = settings; ++ this._position = getPosition(settings); ++ this._isHorizontal = ( this._position == St.Side.TOP || ++ this._position == St.Side.BOTTOM ); ++ this._signalsHandler = new Convenience.GlobalSignalsHandler(); ++ ++ this._dragPlaceholder = null; ++ this._dragPlaceholderPos = -1; ++ this._animatingPlaceholdersCount = 0; ++ this._showLabelTimeoutId = 0; ++ this._resetHoverTimeoutId = 0; ++ this._ensureAppIconVisibilityTimeoutId = 0; ++ this._labelShowing = false; ++ ++ this._containerObject = new myDashActor(settings); ++ this._container = this._containerObject.actor; ++ this._scrollView = new St.ScrollView({ name: 'dashtodockDashScrollview', ++ hscrollbar_policy: Gtk.PolicyType.NEVER, ++ vscrollbar_policy: Gtk.PolicyType.NEVER, ++ enable_mouse_scrolling: false }); ++ ++ this._scrollView.connect('scroll-event', Lang.bind(this, this._onScrollEvent )); ++ ++ this._box = new St.BoxLayout({ vertical: !this._isHorizontal, ++ clip_to_allocation: false, ++ x_align: Clutter.ActorAlign.START, ++ y_align: Clutter.ActorAlign.START }); ++ this._box._delegate = this; ++ this._container.add_actor(this._scrollView); ++ this._scrollView.add_actor(this._box); ++ ++ this._showAppsIcon = new Dash.ShowAppsIcon(); ++ extendShowAppsIcon(this._showAppsIcon, this._settings); ++ this._showAppsIcon.childScale = 1; ++ this._showAppsIcon.childOpacity = 255; ++ this._showAppsIcon.icon.setIconSize(this.iconSize); ++ this._hookUpLabel(this._showAppsIcon); ++ ++ ++ let appsIcon = this._showAppsIcon; ++ appsIcon.connect('menu-state-changed', ++ Lang.bind(this, function(appsIcon, opened) { ++ this._itemMenuStateChanged(appsIcon, opened); ++ })); ++ ++ this.showAppsButton = this._showAppsIcon.toggleButton; ++ ++ this._container.add_actor(this._showAppsIcon); ++ ++ let rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL; ++ this.actor = new St.Bin({ child: this._container, ++ y_align: St.Align.START, x_align:rtl?St.Align.END:St.Align.START ++ }); ++ ++ if(this._isHorizontal) { ++ this.actor.connect('notify::width', Lang.bind(this, ++ function() { ++ if (this._maxHeight != this.actor.width) ++ this._queueRedisplay(); ++ this._maxHeight = this.actor.width; ++ })); ++ } else { ++ this.actor.connect('notify::height', Lang.bind(this, ++ function() { ++ if (this._maxHeight != this.actor.height) ++ this._queueRedisplay(); ++ this._maxHeight = this.actor.height; ++ })); ++ } ++ ++ // Update minimization animation target position on allocation of the ++ // container and on scrollview change. ++ this._box.connect('notify::allocation', Lang.bind(this, this._updateAppIconsGeometry)); ++ let scrollViewAdjustment = this._isHorizontal?this._scrollView.hscroll.adjustment:this._scrollView.vscroll.adjustment; ++ scrollViewAdjustment.connect('notify::value', Lang.bind(this, this._updateAppIconsGeometry)); ++ ++ this._workId = Main.initializeDeferredWork(this._box, Lang.bind(this, this._redisplay)); ++ ++ this._appSystem = Shell.AppSystem.get_default(); ++ ++ this._signalsHandler.add( ++ [ ++ this._appSystem, ++ 'installed-changed', ++ Lang.bind(this, function() { ++ AppFavorites.getAppFavorites().reload(); ++ this._queueRedisplay(); ++ }) ++ ], ++ [ ++ AppFavorites.getAppFavorites(), ++ 'changed', ++ Lang.bind(this, this._queueRedisplay) ++ ], ++ [ ++ this._appSystem, ++ 'app-state-changed', ++ Lang.bind(this, this._queueRedisplay) ++ ], ++ [ ++ Main.overview, ++ 'item-drag-begin', ++ Lang.bind(this, this._onDragBegin) ++ ], ++ [ ++ Main.overview, ++ 'item-drag-end', ++ Lang.bind(this, this._onDragEnd) ++ ], ++ [ ++ Main.overview, ++ 'item-drag-cancelled', ++ Lang.bind(this, this._onDragCancelled) ++ ] ++ ); ++ ++ }, ++ ++ destroy: function() { ++ this._signalsHandler.destroy(); ++ }, ++ ++ _onScrollEvent: function(actor, event) { ++ ++ // reset timeout to avid conflicts with the mousehover event ++ if (this._ensureAppIconVisibilityTimeoutId>0) { ++ Mainloop.source_remove(this._ensureAppIconVisibilityTimeoutId); ++ this._ensureAppIconVisibilityTimeoutId = 0; ++ } ++ ++ // Skip to avoid double events mouse ++ if (event.is_pointer_emulated()) ++ return Clutter.EVENT_STOP; ++ ++ let adjustment, delta; ++ ++ if (this._isHorizontal) ++ adjustment = this._scrollView.get_hscroll_bar().get_adjustment(); ++ else ++ adjustment = this._scrollView.get_vscroll_bar().get_adjustment(); ++ ++ let increment = adjustment.step_increment; ++ ++ switch ( event.get_scroll_direction() ) { ++ case Clutter.ScrollDirection.UP: ++ delta = -increment; ++ break; ++ case Clutter.ScrollDirection.DOWN: ++ delta = +increment; ++ break; ++ case Clutter.ScrollDirection.SMOOTH: ++ let [dx, dy] = event.get_scroll_delta(); ++ delta = dy*increment; ++ // Also consider horizontal component, for instance touchpad ++ if (this._isHorizontal) ++ delta += dx*increment; ++ break; ++ ++ } ++ ++ adjustment.set_value(adjustment.get_value() + delta); ++ ++ return Clutter.EVENT_STOP; ++ ++ }, ++ ++ _onDragBegin: function() { ++ this._dragCancelled = false; ++ this._dragMonitor = { ++ dragMotion: Lang.bind(this, this._onDragMotion) ++ }; ++ DND.addDragMonitor(this._dragMonitor); ++ ++ if (this._box.get_n_children() == 0) { ++ this._emptyDropTarget = new Dash.EmptyDropTargetItem(); ++ this._box.insert_child_at_index(this._emptyDropTarget, 0); ++ this._emptyDropTarget.show(true); ++ } ++ }, ++ ++ _onDragCancelled: function() { ++ this._dragCancelled = true; ++ this._endDrag(); ++ }, ++ ++ _onDragEnd: function() { ++ if (this._dragCancelled) ++ return; ++ ++ this._endDrag(); ++ }, ++ ++ _endDrag: function() { ++ this._clearDragPlaceholder(); ++ this._clearEmptyDropTarget(); ++ this._showAppsIcon.setDragApp(null); ++ DND.removeDragMonitor(this._dragMonitor); ++ }, ++ ++ _onDragMotion: function(dragEvent) { ++ let app = Dash.getAppFromSource(dragEvent.source); ++ if (app == null) ++ return DND.DragMotionResult.CONTINUE; ++ ++ let showAppsHovered = ++ this._showAppsIcon.contains(dragEvent.targetActor); ++ ++ if (!this._box.contains(dragEvent.targetActor) || showAppsHovered) ++ this._clearDragPlaceholder(); ++ ++ if (showAppsHovered) ++ this._showAppsIcon.setDragApp(app); ++ else ++ this._showAppsIcon.setDragApp(null); ++ ++ return DND.DragMotionResult.CONTINUE; ++ }, ++ ++ _appIdListToHash: function(apps) { ++ let ids = {}; ++ for (let i = 0; i < apps.length; i++) ++ ids[apps[i].get_id()] = apps[i]; ++ return ids; ++ }, ++ ++ _queueRedisplay: function () { ++ Main.queueDeferredWork(this._workId); ++ }, ++ ++ _hookUpLabel: function(item, appIcon) { ++ item.child.connect('notify::hover', Lang.bind(this, function() { ++ this._syncLabel(item, appIcon); ++ })); ++ ++ let id = Main.overview.connect('hiding', Lang.bind(this, function() { ++ this._labelShowing = false; ++ item.hideLabel(); ++ })); ++ ++ let id2 = this.connect('cleanup-labels', Lang.bind(this, function() { ++ // setting the hover to false also hide the label ++ item.child.hover = false; ++ })); ++ ++ item.child.connect('destroy', Lang.bind(this, function() { ++ Main.overview.disconnect(id); ++ this.disconnect(id2); ++ })); ++ ++ if (appIcon) { ++ appIcon.connect('sync-tooltip', Lang.bind(this, function() { ++ this._syncLabel(item, appIcon); ++ })); ++ } ++ }, ++ ++ cleanUpLabels: function() { ++ this.emit('cleanup-labels'); ++ }, ++ ++ _createAppItem: function(app) { ++ let appIcon = new myAppIcon(this._settings, app, ++ { setSizeManually: true, ++ showLabel: false }); ++ appIcon._draggable.connect('drag-begin', ++ Lang.bind(this, function() { ++ appIcon.actor.opacity = 50; ++ })); ++ appIcon._draggable.connect('drag-end', ++ Lang.bind(this, function() { ++ appIcon.actor.opacity = 255; ++ })); ++ appIcon.connect('menu-state-changed', ++ Lang.bind(this, function(appIcon, opened) { ++ this._itemMenuStateChanged(item, opened); ++ })); ++ ++ let item = new Dash.DashItemContainer(); ++ extendDashItemContainer(item, this._settings); ++ ++ ++ item.setChild(appIcon.actor); ++ appIcon.actor.connect('notify::hover', Lang.bind(this, function() { ++ if (appIcon.actor.hover){ ++ this._ensureAppIconVisibilityTimeoutId = Mainloop.timeout_add(100, Lang.bind(this, function(){ ++ ensureActorVisibleInScrollView(this._scrollView, appIcon.actor); ++ this._ensureAppIconVisibilityTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ })); ++ } else { ++ if (this._ensureAppIconVisibilityTimeoutId>0) { ++ Mainloop.source_remove(this._ensureAppIconVisibilityTimeoutId); ++ this._ensureAppIconVisibilityTimeoutId = 0; ++ } ++ } ++ })); ++ ++ appIcon.actor.connect('clicked', ++ Lang.bind(this, function(actor) { ++ ensureActorVisibleInScrollView(this._scrollView, actor); ++ })); ++ ++ appIcon.actor.connect('key-focus-in', ++ Lang.bind(this, function(actor) { ++ ++ let [x_shift, y_shift] = ensureActorVisibleInScrollView(this._scrollView, actor); ++ ++ // This signal is triggered also by mouse click. The popup menu is opened at the original ++ // coordinates. Thus correct for the shift which is going to be applied to the scrollview. ++ if (appIcon._menu) { ++ appIcon._menu._boxPointer.xOffset = -x_shift; ++ appIcon._menu._boxPointer.yOffset = -y_shift; ++ } ++ })); ++ ++ // Override default AppIcon label_actor, now the ++ // accessible_name is set at DashItemContainer.setLabelText ++ appIcon.actor.label_actor = null; ++ item.setLabelText(app.get_name()); ++ ++ appIcon.icon.setIconSize(this.iconSize); ++ this._hookUpLabel(item, appIcon); ++ ++ return item; ++ }, ++ ++ // Return an array with the "proper" appIcons currently in the dash ++ _getAppIcons: function() { ++ // Only consider children which are "proper" ++ // icons (i.e. ignoring drag placeholders) and which are not ++ // animating out (which means they will be destroyed at the end of ++ // the animation) ++ let iconChildren = this._box.get_children().filter(function(actor) { ++ return actor.child && ++ actor.child._delegate && ++ actor.child._delegate.icon && ++ !actor.animatingOut; ++ }); ++ ++ let appIcons = iconChildren.map(function(actor){ ++ return actor.child._delegate; ++ }); ++ ++ return appIcons; ++ }, ++ ++ _updateAppIconsGeometry: function() { ++ let appIcons = this._getAppIcons(); ++ appIcons.forEach(function(icon){ ++ icon.updateIconGeometry(); ++ }); ++ }, ++ ++ _itemMenuStateChanged: function(item, opened) { ++ // When the menu closes, it calls sync_hover, which means ++ // that the notify::hover handler does everything we need to. ++ if (opened) { ++ if (this._showLabelTimeoutId > 0) { ++ Mainloop.source_remove(this._showLabelTimeoutId); ++ this._showLabelTimeoutId = 0; ++ } ++ ++ item.hideLabel(); ++ } else { ++ // I want to listen from outside when a menu is closed. I used to ++ // add a custom signal to the appIcon, since gnome 3.8 the signal ++ // calling this callback was added upstream. ++ this.emit('menu-closed'); ++ } ++ }, ++ ++ _syncLabel: function (item, appIcon) { ++ let shouldShow = appIcon ? appIcon.shouldShowTooltip() : item.child.get_hover(); ++ ++ if (shouldShow) { ++ 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(); ++ this._showLabelTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ })); ++ GLib.Source.set_name_by_id(this._showLabelTimeoutId, '[gnome-shell] item.showLabel'); ++ if (this._resetHoverTimeoutId > 0) { ++ Mainloop.source_remove(this._resetHoverTimeoutId); ++ this._resetHoverTimeoutId = 0; ++ } ++ } ++ } else { ++ 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; ++ this._resetHoverTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ })); ++ GLib.Source.set_name_by_id(this._resetHoverTimeoutId, '[gnome-shell] this._labelShowing'); ++ } ++ } ++ }, ++ ++ _adjustIconSize: function() { ++ // For the icon size, we only consider children which are "proper" ++ // icons (i.e. ignoring drag placeholders) and which are not ++ // animating out (which means they will be destroyed at the end of ++ // the animation) ++ let iconChildren = this._box.get_children().filter(function(actor) { ++ return actor.child && ++ actor.child._delegate && ++ actor.child._delegate.icon && ++ !actor.animatingOut; ++ }); ++ ++ iconChildren.push(this._showAppsIcon); ++ ++ if (this._maxHeight == -1) ++ return; ++ ++ let themeNode = this._container.get_theme_node(); ++ let maxAllocation = new Clutter.ActorBox({ x1: 0, y1: 0, ++ x2: this._isHorizontal?this._maxHeight:42 /* whatever */, ++ y2: this._isHorizontal?42:this._maxHeight }); ++ let maxContent = themeNode.get_content_box(maxAllocation); ++ let availHeight; ++ if (this._isHorizontal) ++ availHeight = maxContent.x2 - maxContent.x1; ++ else ++ availHeight = maxContent.y2 - maxContent.y1; ++ let spacing = themeNode.get_length('spacing'); ++ ++ let firstButton = iconChildren[0].child; ++ let firstIcon = firstButton._delegate.icon; ++ ++ let minHeight, natHeight, maxWidth, natWidth; ++ ++ // Enforce the current icon size during the size request ++ firstIcon.setIconSize(this.iconSize); ++ [minHeight, natHeight] = firstButton.get_preferred_height(-1); ++ [minWidth, natWidth] = firstButton.get_preferred_width(-1); ++ ++ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; ++ let iconSizes = this._availableIconSizes.map(function(s) { ++ return s * scaleFactor; ++ }); ++ ++ // Subtract icon padding and box spacing from the available height ++ if(this._isHorizontal){ ++ availHeight -= iconChildren.length * (natWidth - this.iconSize * scaleFactor) + ++ (iconChildren.length - 1) * spacing; ++ } else { ++ availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) + ++ (iconChildren.length - 1) * spacing; ++ } ++ ++ let availSize = availHeight / iconChildren.length; ++ ++ ++ let newIconSize = this._availableIconSizes[0]; ++ for (let i = 0; i < iconSizes.length; i++) { ++ if (iconSizes[i] < availSize) ++ newIconSize = this._availableIconSizes[i]; ++ } ++ ++ if (newIconSize == this.iconSize) ++ return; ++ ++ let oldIconSize = this.iconSize; ++ this.iconSize = newIconSize; ++ this.emit('icon-size-changed'); ++ ++ let scale = oldIconSize / newIconSize; ++ for (let i = 0; i < iconChildren.length; i++) { ++ let icon = iconChildren[i].child._delegate.icon; ++ ++ // Set the new size immediately, to keep the icons' sizes ++ // in sync with this.iconSize ++ icon.setIconSize(this.iconSize); ++ ++ // Don't animate the icon size change when the overview ++ // is transitioning, or when initially filling ++ // the dash ++ if (Main.overview.animationInProgress || ++ !this._shownInitially) ++ continue; ++ ++ let [targetWidth, targetHeight] = icon.icon.get_size(); ++ ++ // Scale the icon's texture to the previous size and ++ // tween to the new size ++ icon.icon.set_size(icon.icon.width * scale, ++ icon.icon.height * scale); ++ ++ Tweener.addTween(icon.icon, ++ { width: targetWidth, ++ height: targetHeight, ++ time: DASH_ANIMATION_TIME, ++ transition: 'easeOutQuad', ++ }); ++ } ++ }, ++ ++ _redisplay: function () { ++ let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); ++ ++ let running = this._appSystem.get_running(); ++ ++ let children = this._box.get_children().filter(function(actor) { ++ return actor.child && ++ actor.child._delegate && ++ actor.child._delegate.app; ++ }); ++ // Apps currently in the dash ++ let oldApps = children.map(function(actor) { ++ return actor.child._delegate.app; ++ }); ++ // Apps supposed to be in the dash ++ let newApps = []; ++ ++ for (let id in favorites) ++ newApps.push(favorites[id]); ++ ++ if( this._settings.get_boolean('show-running') ) { ++ for (let i = 0; i < running.length; i++) { ++ let app = running[i]; ++ if (app.get_id() in favorites) ++ continue; ++ newApps.push(app); ++ } ++ } ++ ++ // Figure out the actual changes to the list of items; we iterate ++ // over both the list of items currently in the dash and the list ++ // of items expected there, and collect additions and removals. ++ // Moves are both an addition and a removal, where the order of ++ // the operations depends on whether we encounter the position ++ // where the item has been added first or the one from where it ++ // was removed. ++ // There is an assumption that only one item is moved at a given ++ // time; when moving several items at once, everything will still ++ // end up at the right position, but there might be additional ++ // additions/removals (e.g. it might remove all the launchers ++ // and add them back in the new order even if a smaller set of ++ // additions and removals is possible). ++ // If above assumptions turns out to be a problem, we might need ++ // to use a more sophisticated algorithm, e.g. Longest Common ++ // Subsequence as used by diff. ++ let addedItems = []; ++ let removedActors = []; ++ ++ let newIndex = 0; ++ let oldIndex = 0; ++ while (newIndex < newApps.length || oldIndex < oldApps.length) { ++ // No change at oldIndex/newIndex ++ if (oldApps[oldIndex] == newApps[newIndex]) { ++ oldIndex++; ++ newIndex++; ++ continue; ++ } ++ ++ // App removed at oldIndex ++ if (oldApps[oldIndex] && ++ newApps.indexOf(oldApps[oldIndex]) == -1) { ++ removedActors.push(children[oldIndex]); ++ oldIndex++; ++ continue; ++ } ++ ++ // App added at newIndex ++ if (newApps[newIndex] && ++ oldApps.indexOf(newApps[newIndex]) == -1) { ++ addedItems.push({ app: newApps[newIndex], ++ item: this._createAppItem(newApps[newIndex]), ++ pos: newIndex }); ++ newIndex++; ++ continue; ++ } ++ ++ // App moved ++ let insertHere = newApps[newIndex + 1] && ++ newApps[newIndex + 1] == oldApps[oldIndex]; ++ let alreadyRemoved = removedActors.reduce(function(result, actor) { ++ let removedApp = actor.child._delegate.app; ++ return result || removedApp == newApps[newIndex]; ++ }, false); ++ ++ if (insertHere || alreadyRemoved) { ++ let newItem = this._createAppItem(newApps[newIndex]); ++ addedItems.push({ app: newApps[newIndex], ++ item: newItem, ++ pos: newIndex + removedActors.length }); ++ newIndex++; ++ } else { ++ removedActors.push(children[oldIndex]); ++ oldIndex++; ++ } ++ } ++ ++ for (let i = 0; i < addedItems.length; i++) ++ this._box.insert_child_at_index(addedItems[i].item, ++ addedItems[i].pos); ++ ++ for (let i = 0; i < removedActors.length; i++) { ++ let item = removedActors[i]; ++ ++ // Don't animate item removal when the overview is transitioning ++ if (!Main.overview.animationInProgress) ++ item.animateOutAndDestroy(); ++ else ++ item.destroy(); ++ } ++ ++ this._adjustIconSize(); ++ ++ for (let i = 0; i < addedItems.length; i++){ ++ // Emit a custom signal notifying that a new item has been added ++ this.emit('item-added', addedItems[i]); ++ } ++ ++ // Skip animations on first run when adding the initial set ++ // of items, to avoid all items zooming in at once ++ ++ let animate = this._shownInitially && ++ !Main.overview.animationInProgress; ++ ++ if (!this._shownInitially) ++ this._shownInitially = true; ++ ++ for (let i = 0; i < addedItems.length; i++) { ++ addedItems[i].item.show(animate); ++ } ++ ++ // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744 ++ // Without it, StBoxLayout may use a stale size cache ++ this._box.queue_relayout(); ++ ++ // This is required for icon reordering when the scrollview is used. ++ this._updateAppIconsGeometry(); ++ }, ++ ++ setIconSize: function (max_size, doNotAnimate) { ++ ++ let max_allowed = baseIconSizes[baseIconSizes.length-1]; ++ max_size = Math.min(max_size, max_allowed); ++ ++ if (this._settings.get_boolean('icon-size-fixed')) { ++ this._availableIconSizes = [ max_size ]; ++ } else { ++ this._availableIconSizes = baseIconSizes.filter( ++ function(val){ ++ return (val numChildren) ++ pos = numChildren; ++ } else ++ pos = 0; // always insert at the top when dash is empty ++ ++ /* Take into account childredn position in rtl*/ ++ if (this._isHorizontal && ++ Clutter.get_default_text_direction() == Clutter.TextDirection.RTL ++ ) ++ pos = numChildren - pos; ++ ++ if (pos != this._dragPlaceholderPos && pos <= numFavorites && this._animatingPlaceholdersCount == 0) { ++ this._dragPlaceholderPos = pos; ++ ++ // Don't allow positioning before or after self ++ if (favPos != -1 && (pos == favPos || pos == favPos + 1)) { ++ this._clearDragPlaceholder(); ++ return DND.DragMotionResult.CONTINUE; ++ } ++ ++ // If the placeholder already exists, we just move ++ // it, but if we are adding it, expand its size in ++ // an animation ++ let fadeIn; ++ if (this._dragPlaceholder) { ++ this._dragPlaceholder.destroy(); ++ fadeIn = false; ++ } else { ++ fadeIn = true; ++ } ++ ++ this._dragPlaceholder = new Dash.DragPlaceholderItem(); ++ this._dragPlaceholder.child.set_width (this.iconSize); ++ this._dragPlaceholder.child.set_height (this.iconSize / 2); ++ this._box.insert_child_at_index(this._dragPlaceholder, ++ this._dragPlaceholderPos); ++ this._dragPlaceholder.show(fadeIn); ++ // Ensure the next and previous icon are visible when moving the placeholder ++ // (I assume there's room for both of them) ++ if (this._dragPlaceholderPos > 1) ++ ensureActorVisibleInScrollView(this._scrollView, this._box.get_children()[this._dragPlaceholderPos-1]); ++ if (this._dragPlaceholderPos < this._box.get_children().length-1) ++ ensureActorVisibleInScrollView(this._scrollView, this._box.get_children()[this._dragPlaceholderPos+1]); ++ } ++ ++ // Remove the drag placeholder if we are not in the ++ // "favorites zone" ++ if (pos > numFavorites) ++ this._clearDragPlaceholder(); ++ ++ if (!this._dragPlaceholder) ++ return DND.DragMotionResult.NO_DROP; ++ ++ let srcIsFavorite = (favPos != -1); ++ ++ if (srcIsFavorite) ++ return DND.DragMotionResult.MOVE_DROP; ++ ++ return DND.DragMotionResult.COPY_DROP; ++ }, ++ ++ // Draggable target interface ++ acceptDrop : function(source, actor, x, y, time) { ++ let app = Dash.getAppFromSource(source); ++ ++ // Don't allow favoriting of transient apps ++ if (app == null || app.is_window_backed()) { ++ return false; ++ } ++ ++ let id = app.get_id(); ++ ++ let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); ++ ++ let srcIsFavorite = (id in favorites); ++ ++ let favPos = 0; ++ let children = this._box.get_children(); ++ for (let i = 0; i < this._dragPlaceholderPos; i++) { ++ if (this._dragPlaceholder && ++ children[i] == this._dragPlaceholder) ++ continue; ++ ++ let childId = children[i].child._delegate.app.get_id(); ++ if (childId == id) ++ continue; ++ if (childId in favorites) ++ favPos++; ++ } ++ ++ // No drag placeholder means we don't wan't to favorite the app ++ // and we are dragging it to its original position ++ if (!this._dragPlaceholder) ++ return true; ++ ++ Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, ++ function () { ++ let appFavorites = AppFavorites.getAppFavorites(); ++ if (srcIsFavorite) ++ appFavorites.moveFavoriteToPos(id, favPos); ++ else ++ appFavorites.addFavoriteAtPos(id, favPos); ++ return false; ++ })); ++ ++ return true; ++ } ++}); ++ ++Signals.addSignalMethods(myDash.prototype); ++ ++ ++/** ++ * Extend AppIcon ++ * ++ * - Pass settings to the constructor and bind settings changes ++ * - Apply a css class based on the number of windows of each application (#N); ++ * a class of the form "running#N" is applied to the AppWellIcon actor. ++ * like the original .running one. ++ * - add a .focused style to the focused app ++ * - Customize click actions. ++ * - Update minimization animation target ++ * ++ */ ++ ++let tracker = Shell.WindowTracker.get_default(); ++ ++const clickAction = { ++ SKIP: 0, ++ MINIMIZE: 1, ++ LAUNCH: 2, ++ CYCLE_WINDOWS: 3 ++}; ++ ++let recentlyClickedAppLoopId = 0; ++let recentlyClickedApp = null; ++let recentlyClickedAppWindows = null; ++let recentlyClickedAppIndex = 0; ++ ++const myAppIcon = new Lang.Class({ ++ Name: 'dashToDock.AppIcon', ++ Extends: AppDisplay.AppIcon, ++ ++ // settings are required inside. ++ _init: function(settings, app, iconParams, onActivateOverride) { ++ ++ this._settings = settings; ++ this._maxN =4; ++ ++ this.parent(app, iconParams, onActivateOverride); ++ ++ // Monitor windows-changes instead of app state. ++ // Keep using the same Id and function callback (that is extended) ++ if(this._stateChangedId>0){ ++ this.app.disconnect(this._stateChangedId); ++ this._stateChangedId=0; ++ } ++ ++ this._stateChangedId = this.app.connect('windows-changed', ++ Lang.bind(this, ++ this.onWindowsChanged)); ++ this._focuseAppChangeId = tracker.connect('notify::focus-app', ++ Lang.bind(this, ++ this._onFocusAppChanged)); ++ ++ /* To keep compatibility with 3.14.0 and 3.14.1 ++ * after upstream commit 24c0a1a1d458c8d1ba1b9d3e728a27d347f7833f ++ * (https://bugzilla.gnome.org/show_bug.cgi?id=739497), ++ * temporary call _updateRunningStyle(). This ensure windows counter updates ++ * on 3.14 and 3.14.1 where the parent not-extended method, which have ++ * a different name, is called instead. ++ */ ++ this._updateRunningStyle(); ++ ++ }, ++ ++ _onDestroy: function() { ++ this.parent(); ++ ++ // Disconect global signals ++ // stateChangedId is already handled by parent) ++ if(this._focusAppId>0) ++ tracker.disconnect(this._focusAppId); ++ }, ++ ++ onWindowsChanged: function() { ++ ++ this._updateRunningStyle(); ++ this.updateIconGeometry(); ++ ++ }, ++ ++ // Update taraget for minimization animation ++ updateIconGeometry: function() { ++ ++ let rect = new Meta.Rectangle(); ++ ++ [rect.x, rect.y] = this.actor.get_transformed_position(); ++ [rect.width, rect.height] = this.actor.get_transformed_size(); ++ ++ let windows = this.app.get_windows(); ++ windows.forEach(function(w) { ++ w.set_icon_geometry(rect); ++ }); ++ ++ }, ++ ++ _updateRunningStyle: function() { ++ ++ /* To keep compatibility with 3.14.0 and 3.14.1 ++ * after upstream commit 24c0a1a1d458c8d1ba1b9d3e728a27d347f7833f ++ * (https://bugzilla.gnome.org/show_bug.cgi?id=739497), ++ * check for which method is defined ++ */ ++ if(AppDisplay.AppIcon.prototype._updateRunningStyle) ++ this.parent(); ++ else ++ AppDisplay.AppIcon.prototype._onStateChanged.call(this); ++ ++ this._updateCounterClass(); ++ }, ++ ++ popupMenu: function() { ++ this._removeMenuTimeout(); ++ this.actor.fake_release(); ++ this._draggable.fakeRelease(); ++ ++ if (!this._menu) { ++ this._menu = new myAppIconMenu(this, this._settings); ++ this._menu.connect('activate-window', Lang.bind(this, function (menu, window) { ++ this.activateWindow(window); ++ })); ++ this._menu.connect('open-state-changed', Lang.bind(this, function (menu, isPoppedUp) { ++ if (!isPoppedUp) ++ this._onMenuPoppedDown(); ++ })); ++ let id = Main.overview.connect('hiding', Lang.bind(this, function () { this._menu.close(); })); ++ this._menu.actor.connect('destroy', function() { ++ Main.overview.disconnect(id); ++ }); ++ ++ this._menuManager.addMenu(this._menu); ++ } ++ ++ this.emit('menu-state-changed', true); ++ ++ this.actor.set_hover(true); ++ this._menu.popup(); ++ this._menuManager.ignoreRelease(); ++ this.emit('sync-tooltip'); ++ ++ return false; ++ }, ++ ++ _onFocusAppChanged: function() { ++ if(tracker.focus_app == this.app) ++ this.actor.add_style_class_name('focused'); ++ else ++ this.actor.remove_style_class_name('focused'); ++ }, ++ ++ activate: function(button) { ++ ++ if ( !this._settings.get_boolean('customize-click') ){ ++ this.parent(button); ++ return; ++ } ++ ++ let event = Clutter.get_current_event(); ++ let modifiers = event ? event.get_state() : 0; ++ let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK && ++ this.app.state == Shell.AppState.RUNNING || ++ button && button == 2; ++ let focusedApp = tracker.focus_app; ++ ++ if (this.app.state == Shell.AppState.STOPPED || openNewWindow) ++ this.animateLaunch(); ++ ++ if(button && button == 1 && this.app.state == Shell.AppState.RUNNING) { ++ ++ if(modifiers & Clutter.ModifierType.CONTROL_MASK){ ++ // Keep default behaviour: launch new window ++ // By calling the parent method I make it compatible ++ // with other extensions tweaking ctrl + click ++ this.parent(button); ++ return; ++ ++ } else if (this._settings.get_boolean('minimize-shift') && modifiers & Clutter.ModifierType.SHIFT_MASK){ ++ // On double click, minimize all windows in the current workspace ++ minimizeWindow(this.app, event.get_click_count() > 1); ++ ++ } else if(this.app == focusedApp && !Main.overview._shown){ ++ ++ if(this._settings.get_enum('click-action') == clickAction.CYCLE_WINDOWS) ++ cycleThroughWindows(this.app); ++ else if(this._settings.get_enum('click-action') == clickAction.MINIMIZE) ++ minimizeWindow(this.app, true); ++ else if(this._settings.get_enum('click-action') == clickAction.LAUNCH) ++ this.app.open_new_window(-1); ++ ++ } else { ++ // Activate all window of the app or only le last used ++ if (this._settings.get_enum('click-action') == clickAction.CYCLE_WINDOWS && !Main.overview._shown){ ++ // If click cycles through windows I can activate one windows at a time ++ let windows = getAppInterestingWindows(this.app); ++ let w = windows[0]; ++ Main.activateWindow(w); ++ } else if(this._settings.get_enum('click-action') == clickAction.LAUNCH) ++ this.app.open_new_window(-1); ++ else if(this._settings.get_enum('click-action') == clickAction.MINIMIZE){ ++ // If click minimizes all, then one expects all windows to be reshown ++ activateAllWindows(this.app); ++ } else ++ this.app.activate(); ++ } ++ } else { ++ // Default behaviour ++ if (openNewWindow) ++ this.app.open_new_window(-1); ++ else ++ this.app.activate(); ++ } ++ ++ Main.overview.hide(); ++ }, ++ ++ _updateCounterClass: function() { ++ ++ let n = getAppInterestingWindows(this.app).length; ++ ++ if(n>this._maxN) ++ n = this._maxN; ++ ++ for(let i = 1; i<=this._maxN; i++){ ++ let className = 'running'+i; ++ if(i!=n) ++ this.actor.remove_style_class_name(className); ++ else ++ this.actor.add_style_class_name(className); ++ } ++ } ++}); ++ ++function minimizeWindow(app, param){ ++ // Param true make all app windows minimize ++ let windows = getAppInterestingWindows(app); ++ let current_workspace = global.screen.get_active_workspace(); ++ for (let i = 0; i < windows.length; i++) { ++ let w = windows[i]; ++ if (w.get_workspace() == current_workspace && w.showing_on_its_workspace()){ ++ w.minimize(); ++ // Just minimize one window. By specification it should be the ++ // focused window on the current workspace. ++ if(!param) ++ break; ++ } ++ } ++} ++ ++/* ++ * By default only non minimized windows are activated. ++ * This activates all windows in the current workspace. ++ */ ++function activateAllWindows(app){ ++ ++ // First activate first window so workspace is switched if needed. ++ app.activate(); ++ ++ // then activate all other app windows in the current workspace ++ let windows = getAppInterestingWindows(app); ++ let activeWorkspace = global.screen.get_active_workspace_index(); ++ ++ if( windows.length<=0) ++ return; ++ ++ let activatedWindows = 0; ++ ++ for (let i=windows.length-1; i>=0; i--){ ++ if(windows[i].get_workspace().index() == activeWorkspace){ ++ Main.activateWindow(windows[i]); ++ activatedWindows++; ++ } ++ } ++} ++ ++function cycleThroughWindows(app) { ++ ++ // Store for a little amount of time last clicked app and its windows ++ // since the order changes upon window interaction ++ let MEMORY_TIME=3000; ++ ++ let app_windows = getAppInterestingWindows(app); ++ ++ if(recentlyClickedAppLoopId>0) ++ Mainloop.source_remove(recentlyClickedAppLoopId); ++ recentlyClickedAppLoopId = Mainloop.timeout_add(MEMORY_TIME, resetRecentlyClickedApp); ++ ++ // If there isn't already a list of windows for the current app, ++ // or the stored list is outdated, use the current windows list. ++ if( !recentlyClickedApp || ++ recentlyClickedApp.get_id() != app.get_id() || ++ recentlyClickedAppWindows.length != app_windows.length ++ ){ ++ ++ recentlyClickedApp = app; ++ recentlyClickedAppWindows = app_windows; ++ recentlyClickedAppIndex = 0; ++ } ++ ++ recentlyClickedAppIndex++; ++ let index = recentlyClickedAppIndex % recentlyClickedAppWindows.length; ++ let window = recentlyClickedAppWindows[index]; ++ ++ Main.activateWindow(window); ++} ++ ++function resetRecentlyClickedApp() { ++ ++ if(recentlyClickedAppLoopId>0) ++ Mainloop.source_remove(recentlyClickedAppLoopId); ++ recentlyClickedAppLoopId=0; ++ recentlyClickedApp =null; ++ recentlyClickedAppWindows = null; ++ recentlyClickedAppIndex = 0; ++ ++ return false; ++} ++ ++function getAppInterestingWindows(app) { ++ // Filter out unnecessary windows, for instance ++ // nautilus desktop window. ++ let windows = app.get_windows().filter(function(w) { ++ return !w.skip_taskbar; ++ }); ++ ++ return windows; ++} ++ ++ ++/* ++ * This is a copy of the same function in utils.js, but also adjust horizontal scrolling ++ * and perform few further cheks on the current value to avoid changing the values when ++ * it would be clamp to the current one in any case. ++ * Return the amount of shift applied ++*/ ++function ensureActorVisibleInScrollView(scrollView, actor) { ++ ++ let adjust_v = true; ++ let adjust_h = true; ++ ++ let vadjustment = scrollView.vscroll.adjustment; ++ let hadjustment = scrollView.hscroll.adjustment; ++ let [vvalue, vlower, vupper, vstepIncrement, vpageIncrement, vpageSize] = vadjustment.get_values(); ++ let [hvalue, hlower, hupper, hstepIncrement, hpageIncrement, hpageSize] = hadjustment.get_values(); ++ ++ let [hvalue0, vvalue0] = [hvalue, vvalue]; ++ ++ let voffset = 0; ++ let hoffset = 0; ++ let fade = scrollView.get_effect("fade"); ++ if (fade){ ++ voffset = fade.vfade_offset; ++ hoffset = fade.hfade_offset; ++ } ++ ++ let box = actor.get_allocation_box(); ++ let y1 = box.y1, y2 = box.y2, x1 = box.x1, x2 = box.x2; ++ ++ let parent = actor.get_parent(); ++ while (parent != scrollView) { ++ if (!parent) ++ throw new Error("actor not in scroll view"); ++ ++ let box = parent.get_allocation_box(); ++ y1 += box.y1; ++ y2 += box.y1; ++ x1 += box.x1; ++ x2 += box.x1; ++ parent = parent.get_parent(); ++ } ++ ++ if (y1 < vvalue + voffset) ++ vvalue = Math.max(0, y1 - voffset); ++ else if (vvalue < vupper - vpageSize && y2 > vvalue + vpageSize - voffset) ++ vvalue = Math.min(vupper -vpageSize, y2 + voffset - vpageSize); ++ ++ if (x1 < hvalue + hoffset) ++ hvalue = Math.max(0, x1 - hoffset); ++ else if (hvalue < hupper - hpageSize && x2 > hvalue + hpageSize - hoffset) ++ hvalue = Math.min(hupper - hpageSize, x2 + hoffset - hpageSize); ++ ++ if (vvalue !== vvalue0) { ++ Tweener.addTween(vadjustment, ++ { value: vvalue, ++ time: Util.SCROLL_TIME, ++ transition: 'easeOutQuad' }); ++ } ++ ++ if (hvalue !== hvalue0) { ++ Tweener.addTween(hadjustment, ++ { value: hvalue, ++ time: Util.SCROLL_TIME, ++ transition: 'easeOutQuad' }); ++ } ++ ++ return [hvalue- hvalue0, vvalue - vvalue0]; ++} +diff --git a/extensions/dash-to-dock/org.gnome.shell.extensions.dash-to-dock.gschema.xml.in b/extensions/dash-to-dock/org.gnome.shell.extensions.dash-to-dock.gschema.xml.in +new file mode 100644 +index 0000000..e59f35a +--- /dev/null ++++ b/extensions/dash-to-dock/org.gnome.shell.extensions.dash-to-dock.gschema.xml.in +@@ -0,0 +1,159 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 'LEFT' ++ Dock position ++ Dock is shown on the Left, Right, Top or Bottom side of the screen. ++ ++ ++ 0.25 ++ Animation time ++ Sets the time duration of the autohide effect. ++ ++ ++ 0.25 ++ Show delay ++ Sets the delay after the mouse reaches the screen border before showing the dock. ++ ++ ++ 0.20 ++ Show delay ++ Sets the delay after the mouse left the dock before hiding it. ++ ++ ++ false ++ Dash background is opaque ++ Makes the background of the dash opaque improving readability when in autohide mode. ++ ++ ++ 0.8 ++ Opacity of the dash background ++ Sets the opacity of the dash background when in autohide mode. ++ ++ ++ true ++ Dock dodges windows ++ Enable or disable intellihide mode ++ ++ ++ true ++ Dock dodges only same app windows ++ ++ ++ ++ true ++ Dock shown on mouse over ++ Enable or disable autohide mode ++ ++ ++ true ++ Require pressure to show dash ++ Enable or disable requiring pressure to show the dash ++ ++ ++ 100 ++ Pressure threshold ++ Sets how much pressure is needed to show the dash. ++ ++ ++ false ++ Dock always visible ++ Dock is always visible ++ ++ ++ true ++ Switch workspace by scrolling over the dock ++ Add the possibility to switch workspace by mouse scrolling over the dock. ++ ++ ++ 48 ++ Maximum dash icon size ++ Set the allowed maximum dash icon size. Allowed range: 16..64. ++ ++ ++ false ++ Fixed icon size ++ Keep the icon size fived by scrolling the dock. ++ ++ ++ false ++ Apply custom theme ++ Apply customization to the dash appearance ++ ++ ++ false ++ TODO ++ TODO ++ ++ ++ false ++ TODO ++ TODO ++ ++ ++ true ++ Show running apps ++ Show or hide running appplications icons in the dash ++ ++ ++ false ++ Show application button at top ++ Show appplication button at top of the dash ++ ++ ++ true ++ Basic compatibility with bolt extensions ++ Make the extension work properly when bolt extensions is enabled ++ ++ ++ 0.95 ++ Dock max height (fraction of available space) ++ ++ ++ false ++ Extend the dock container to all the available height ++ ++ ++ -1 ++ Monitor on which putting the dock ++ Set on which monitor to put the dock, use -1 for the primary one ++ ++ ++ true ++ Customize click behaviour ++ Customize action on various mouse events ++ ++ ++ true ++ Minimize on shift+click ++ ++ ++ true ++ Activate only one window ++ ++ ++ 'cycle-windows' ++ Action when clicking on a running app ++ Set the action that is executed when clicking on the icon of a running application ++ ++ ++ false ++ Make message tray not show on mouse-over. ++ ++ ++ +diff --git a/extensions/dash-to-dock/prefs.js b/extensions/dash-to-dock/prefs.js +new file mode 100644 +index 0000000..4afecec +--- /dev/null ++++ b/extensions/dash-to-dock/prefs.js +@@ -0,0 +1,367 @@ ++// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- ++ ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const GObject = imports.gi.GObject; ++const Gtk = imports.gi.Gtk; ++const Gdk = imports.gi.Gdk; ++const Lang = imports.lang; ++const Mainloop = imports.mainloop; ++ ++ ++const Gettext = imports.gettext.domain('dashtodock'); ++const _ = Gettext.gettext; ++const N_ = function(e) { return e }; ++ ++const ExtensionUtils = imports.misc.extensionUtils; ++const Me = ExtensionUtils.getCurrentExtension(); ++const Convenience = Me.imports.convenience; ++ ++const SCALE_UPDATE_TIMEOUT = 500; ++const DEFAULT_ICONS_SIZES = [ 128, 96, 64, 48, 32, 24, 16 ]; ++ ++const Settings = new Lang.Class({ ++ Name: 'DashToDockSettings', ++ ++ ++ _init: function() { ++ ++ this._settings = Convenience.getSettings('org.gnome.shell.extensions.dash-to-dock'); ++ ++ this._rtl = Gtk.Widget.get_default_direction()==Gtk.TextDirection.RTL; ++ ++ this._builder = new Gtk.Builder(); ++ this._builder.set_translation_domain(Me.metadata['gettext-domain']); ++ this._builder.add_from_file(Me.path + '/Settings.ui'); ++ ++ this.widget = this._builder.get_object('settings_notebook'); ++ ++ // Timeout to delay the update of the settings ++ this._dock_size_timeout = 0; ++ this._icon_size_timeout = 0; ++ this._opacity_timeout = 0; ++ ++ this._bindSettings(); ++ ++ this._builder.connect_signals_full(Lang.bind(this, this._connector)); ++ ++ }, ++ ++ // Connect signals ++ _connector: function(builder, object, signal, handler) { ++ object.connect(signal, Lang.bind(this, this._SignalHandler[handler])); ++ }, ++ ++ _bindSettings: function() { ++ ++ /* Position and size panel */ ++ ++ // Monitor options ++ ++ this._monitors = []; ++ // Build options based on the number of monitors and the current settings. ++ let n_monitors = Gdk.Screen.get_default().get_n_monitors(); ++ let primary_monitor = Gdk.Screen.get_default().get_primary_monitor(); ++ ++ let monitor = this._settings.get_int('preferred-monitor'); ++ ++ // Add primary monitor with index 0, because in GNOME Shell the primary monitor is always 0 ++ this._builder.get_object('dock_monitor_combo').append_text(_("Primary monitor")); ++ this._monitors.push(0); ++ ++ // Add connected monitors ++ let ctr = 0; ++ for (let i = 0; i < n_monitors; i++) { ++ if (i !== primary_monitor){ ++ ctr++; ++ this._monitors.push(ctr); ++ this._builder.get_object('dock_monitor_combo').append_text(_("Secondary monitor ") + ctr); ++ } ++ } ++ ++ // If one of the external monitor is set as preferred, show it even if not attached ++ if ( monitor >= n_monitors && monitor !== primary_monitor) { ++ this._monitors.push(monitor) ++ this._builder.get_object('dock_monitor_combo').append_text(_("Secondary monitor ") + ++ctr); ++ } ++ ++ this._builder.get_object('dock_monitor_combo').set_active(this._monitors.indexOf(monitor)); ++ ++ // Position option ++ let position = this._settings.get_enum('dock-position'); ++ ++ switch (position) { ++ case 0: ++ this._builder.get_object('position_top_button').set_active(true); ++ break; ++ case 1: ++ this._builder.get_object('position_right_button').set_active(true); ++ break; ++ case 2: ++ this._builder.get_object('position_bottom_button').set_active(true); ++ break; ++ case 3: ++ this._builder.get_object('position_left_button').set_active(true); ++ break; ++ } ++ ++ if (this._rtl) { ++ /* Left is Right in rtl as a setting */ ++ this._builder.get_object('position_left_button').set_label(_("Right")); ++ this._builder.get_object('position_right_button').set_label(_("Left")); ++ } ++ ++ // Intelligent autohide options ++ this._settings.bind('dock-fixed', ++ this._builder.get_object('intelligent_autohide_switch'), ++ 'active', ++ Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ this._settings.bind('dock-fixed', ++ this._builder.get_object('intelligent_autohide_button'), ++ 'sensitive', ++ Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ this._settings.bind('insensitive-message-tray', ++ this._builder.get_object('insensitive_messagetray_checkbutton'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('autohide', ++ this._builder.get_object('autohide_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('require-pressure-to-show', ++ this._builder.get_object('require_pressure_checkbutton'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('intellihide', ++ this._builder.get_object('intellihide_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('intellihide-perapp', ++ this._builder.get_object('per_app_intellihide_checkbutton'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('animation-time', ++ this._builder.get_object('animation_duration_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('hide-delay', ++ this._builder.get_object('hide_timeout_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-delay', ++ this._builder.get_object('show_timeout_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('pressure-threshold', ++ this._builder.get_object('pressure_threshold_spinbutton'), ++ 'value', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ //this._builder.get_object('animation_duration_spinbutton').set_value(this._settings.get_double('animation-time')); ++ ++ // Create dialog for intelligent autohide advanced settings ++ this._builder.get_object('intelligent_autohide_button').connect('clicked', Lang.bind(this, function() { ++ ++ let dialog = new Gtk.Dialog({ title: _("Intelligent autohide customization"), ++ transient_for: this.widget.get_toplevel(), ++ use_header_bar: true, ++ modal: true }); ++ ++ // GTK+ leaves positive values for application-defined response ids. ++ // Use +1 for the reset action ++ dialog.add_button(_("Reset to defaults"), 1); ++ ++ let box = this._builder.get_object('intelligent_autohide_advanced_settings_box'); ++ dialog.get_content_area().add(box); ++ ++ this._settings.bind('intellihide', ++ this._builder.get_object('per_app_intellihide_checkbutton'), ++ 'sensitive', ++ Gio.SettingsBindFlags.GET); ++ ++ this._settings.bind('autohide', ++ this._builder.get_object('require_pressure_checkbutton'), ++ 'sensitive', ++ Gio.SettingsBindFlags.GET); ++ ++ dialog.connect('response', Lang.bind(this, function(dialog, id) { ++ if (id == 1) { ++ // restore default settings for the relevant keys ++ let keys = ['intellihide', 'autohide', 'intellihide-perapp', 'require-pressure-to-show', ++ 'animation-time', 'show-delay', 'hide-delay']; ++ keys.forEach(function(val){ ++ this._settings.set_value(val, this._settings.get_default_value(val)); ++ }, this); ++ } else { ++ // remove the settings box so it doesn't get destroyed; ++ dialog.get_content_area().remove(box); ++ dialog.destroy(); ++ } ++ return; ++ })); ++ ++ dialog.show_all(); ++ ++ })); ++ ++ // size options ++ this._builder.get_object('dock_size_scale').set_value(this._settings.get_double('height-fraction')); ++ this._builder.get_object('dock_size_scale').add_mark(0.9, Gtk.PositionType.TOP, null); ++ let icon_size_scale = this._builder.get_object('icon_size_scale'); ++ icon_size_scale.set_range(DEFAULT_ICONS_SIZES[DEFAULT_ICONS_SIZES.length -1], DEFAULT_ICONS_SIZES[0]); ++ icon_size_scale.set_value(this._settings.get_int('dash-max-icon-size')); ++ DEFAULT_ICONS_SIZES.forEach(function(val){ ++ icon_size_scale.add_mark(val, Gtk.PositionType.TOP, val.toString()); ++ }); ++ ++ // Corrent for rtl languages ++ if (this._rtl) { ++ // Flip value position: this is not done automatically ++ this._builder.get_object('dock_size_scale').set_value_pos(Gtk.PositionType.LEFT); ++ icon_size_scale.set_value_pos(Gtk.PositionType.LEFT); ++ /* I suppose due to a bug, having a more than one mark and one above a value of 100 ++ * makes the rendering of the marks wrong in rtl. This doesn't happen setting the scale as not flippable ++ * and then manually inverting it ++ */ ++ icon_size_scale.set_flippable(false); ++ icon_size_scale.set_inverted(true); ++ } ++ ++ this._settings.bind('icon-size-fixed', this._builder.get_object('icon_size_fixed_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('extend-height', this._builder.get_object('dock_size_extend_checkbutton'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('extend-height', this._builder.get_object('dock_size_scale'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN); ++ ++ ++ /* Behavior panel */ ++ ++ this._settings.bind('show-running', ++ this._builder.get_object('show_running_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('show-apps-at-top', ++ this._builder.get_object('application_button_first_switch'), ++ 'active', ++ Gio.SettingsBindFlags.DEFAULT); ++ ++ this._builder.get_object('click_action_combo').set_active(this._settings.get_enum('click-action')); ++ this._builder.get_object('click_action_combo').connect('changed', Lang.bind (this, function(widget) { ++ this._settings.set_enum('click-action', widget.get_active()); ++ })); ++ ++ this._builder.get_object('shift_click_action_combo').set_active(this._settings.get_boolean('minimize-shift')?0:1); ++ ++ this._builder.get_object('shift_click_action_combo').connect('changed', Lang.bind (this, function(widget) { ++ this._settings.set_boolean('minimize-shift', widget.get_active()==1); ++ })); ++ ++ this._settings.bind('scroll-switch-workspace', this._builder.get_object('switch_workspace_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ ++ /* Appearance Panel */ ++ ++ this._settings.bind('apply-custom-theme', this._builder.get_object('customize_theme'), 'sensitive', Gio.SettingsBindFlags.INVERT_BOOLEAN | Gio.SettingsBindFlags.GET); ++ this._settings.bind('apply-custom-theme', this._builder.get_object('builtin_theme_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('custom-theme-shrink', this._builder.get_object('shrink_dash_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('custom-theme-running-dots', this._builder.get_object('running_dots_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._settings.bind('opaque-background', this._builder.get_object('customize_opacity_switch'), 'active', Gio.SettingsBindFlags.DEFAULT); ++ this._builder.get_object('custom_opacity_scale').set_value(this._settings.get_double('background-opacity')); ++ this._settings.bind('opaque-background', this._builder.get_object('custom_opacity'), 'sensitive', Gio.SettingsBindFlags.DEFAULT); ++ ++ /* About Panel */ ++ ++ this._builder.get_object('extension_version').set_label(Me.metadata.version.toString()); ++ ++ }, ++ ++ ++ // Object containing all signals defined in the glade file ++ _SignalHandler: { ++ ++ dock_display_combo_changed_cb: function (combo) { ++ this._settings.set_int('preferred-monitor', this._monitors[combo.get_active()]); ++ }, ++ ++ position_top_button_toggled_cb: function (button){ ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 0); ++ }, ++ ++ position_right_button_toggled_cb: function (button) { ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 1); ++ }, ++ ++ position_bottom_button_toggled_cb: function (button) { ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 2); ++ }, ++ ++ position_left_button_toggled_cb: function (button) { ++ if (button.get_active()) ++ this._settings.set_enum('dock-position', 3); ++ }, ++ ++ icon_size_combo_changed_cb: function(combo) { ++ this._settings.set_int('dash-max-icon-size', this._allIconSizes[combo.get_active()]); ++ }, ++ ++ dock_size_scale_format_value_cb: function(scale, value) { ++ return Math.round(value*100)+ ' %'; ++ }, ++ ++ dock_size_scale_value_changed_cb: function(scale){ ++ // Avoid settings the size consinuosly ++ if (this._dock_size_timeout >0) ++ Mainloop.source_remove(this._dock_size_timeout); ++ ++ this._dock_size_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function(){ ++ this._settings.set_double('height-fraction', scale.get_value()); ++ this._dock_size_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ })); ++ }, ++ ++ icon_size_scale_format_value_cb: function(scale, value) { ++ return value+ ' px'; ++ }, ++ ++ icon_size_scale_value_changed_cb: function(scale){ ++ // Avoid settings the size consinuosly ++ if (this._icon_size_timeout >0) ++ Mainloop.source_remove(this._icon_size_timeout); ++ ++ this._icon_size_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function(){ ++ this._settings.set_int('dash-max-icon-size', scale.get_value()); ++ this._icon_size_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ })); ++ }, ++ ++ custom_opacity_scale_value_changed_cb: function(scale){ ++ // Avoid settings the opacity consinuosly as it's change is animated ++ if (this._opacity_timeout >0) ++ Mainloop.source_remove(this._opacity_timeout); ++ ++ this._opacity_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, Lang.bind(this, function(){ ++ this._settings.set_double('background-opacity', scale.get_value()); ++ this._opacity_timeout = 0; ++ return GLib.SOURCE_REMOVE; ++ })); ++ }, ++ ++ custom_opacity_scale_format_value_cb: function(scale, value) { ++ return Math.round(value*100) + ' %'; ++ } ++ } ++}); ++ ++function init() { ++ Convenience.initTranslations(); ++} ++ ++function buildPrefsWidget() { ++ let settings = new Settings(); ++ let widget = settings.widget; ++ widget.show_all(); ++ return widget; ++} ++ +diff --git a/extensions/dash-to-dock/stylesheet.css b/extensions/dash-to-dock/stylesheet.css +new file mode 100644 +index 0000000..e2ba893 +--- /dev/null ++++ b/extensions/dash-to-dock/stylesheet.css +@@ -0,0 +1,181 @@ ++/* Shrink the dash by reducing padding and border radius */ ++#dashtodockContainer.shrink #dash, ++#dashtodockContainer.dashtodock #dash { ++ border:1px; ++} ++ ++#dashtodockContainer.shrink.left #dash, ++#dashtodockContainer.dashtodock.left #dash { ++ padding: 1px; ++ border-left: 0px; ++ border-radius: 0px 6px 6px 0px; ++} ++ ++#dashtodockContainer.shrink.right #dash, ++#dashtodockContainer.dashtodock.right #dash { ++ padding: 1px; ++ border-right: 0px; ++ border-radius: 6px 0px 0px 6px; ++} ++ ++#dashtodockContainer.shrink.top #dash, ++#dashtodockContainer.dashtodock.top #dash { ++ padding: 1px; ++ border-top: 0px; ++ border-radius: 0px 0px 6px 6px; ++} ++ ++#dashtodockContainer.shrink.bottom #dash, ++#dashtodockContainer.dashtodock.bottom #dash { ++ padding: 1px; ++ border-bottom: 0px; ++ border-radius: 6px 6px 0px 0px; ++} ++ ++/* Scrollview style */ ++.bottom #dashtodockDashScrollview, ++.top #dashtodockDashScrollview { ++ -st-hfade-offset: 24px; ++} ++ ++.left #dashtodockDashScrollview, ++.right #dashtodockDashScrollview { ++ -st-vfade-offset: 24px; ++} ++ ++#dashtodockContainer.running-dots .dash-item-container > StButton, ++#dashtodockContainer.dashtodock .dash-item-container > StButton { ++ transition-duration: 250; ++ background-size: contain; ++} ++ ++#dashtodockContainer.shrink .dash-item-container > StButton, ++#dashtodockContainer.dashtodock .dash-item-container > StButton { ++ padding: 1px 2px; ++} ++ ++/* Dash height extended to the whole available vertical space */ ++#dashtodockContainer.extended.top #dash, ++#dashtodockContainer.extended.right #dash, ++#dashtodockContainer.extended.bottom #dash, ++#dashtodockContainer.extended.left #dash { ++ border-radius: 0; ++} ++ ++#dashtodockContainer.extended.top #dash, ++#dashtodockContainer.extended.bottom #dash { ++ border-left:0px; ++ border-right:0px; ++} ++ ++#dashtodockContainer.extended.right #dash, ++#dashtodockContainer.extended.left #dash { ++ border-top:0px; ++ border-bottom:0px; ++} ++ ++/* Running and focused application style */ ++ ++#dashtodockContainer.running-dots .app-well-app.running > .overview-icon, ++#dashtodockContainer.dashtodock .app-well-app.running > .overview-icon { ++ background-image:none; ++} ++ ++#dashtodockContainer.running-dots .app-well-app.focused > .overview-icon, ++#dashtodockContainer.dashtodock .app-well-app.focused > .overview-icon { ++ transition-duration: 250; ++ background-gradient-start: rgba(255, 255, 255, .05); ++ background-gradient-end: rgba(255, 255, 255, .15); ++ background-gradient-direction: vertical; ++ border-radius: 4px; ++ box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 1); ++} ++ ++#dashtodockContainer.running-dots.left .running1, ++#dashtodockContainer.dashtodock.left .running1 { ++ background-image: url('./media/one.svg'); ++} ++ ++#dashtodockContainer.running-dots.right .running1, ++#dashtodockContainer.dashtodock.right .running1 { ++ background-image: url('./media/one_rtl.svg'); ++} ++ ++#dashtodockContainer.running-dots.bottom .running1, ++#dashtodockContainer.dashtodock.bottom .running1 { ++ background-image: url('./media/one_bottom.svg'); ++} ++ ++#dashtodockContainer.running-dots.top .running1, ++#dashtodockContainer.dashtodock.top .running1 { ++ background-image: url('./media/one_top.svg'); ++} ++ ++#dashtodockContainer.running-dots.left .running2, ++#dashtodockContainer.dashtodock.left .running2 { ++ background-image: url('./media/two.svg'); ++} ++ ++#dashtodockContainer.running-dots.right .running2, ++#dashtodockContainer.dashtodock.right .running2 { ++ background-image: url('./media/two_rtl.svg'); ++} ++ ++#dashtodockContainer.running-dots.bottom .running2, ++#dashtodockContainer.dashtodock.bottom .running2 { ++ background-image: url('./media/two_bottom.svg'); ++} ++ ++#dashtodockContainer.running-dots.top .running2, ++#dashtodockContainer.dashtodock.top .running2 { ++ background-image: url('./media/two_top.svg'); ++} ++ ++#dashtodockContainer.running-dots.left .running3, ++#dashtodockContainer.dashtodock.left .running3 { ++ background-image: url('./media/three.svg'); ++} ++ ++#dashtodockContainer.running-dots.right .running3, ++#dashtodockContainer.dashtodock.right .running3 { ++ background-image: url('./media/three_rtl.svg'); ++} ++ ++#dashtodockContainer.running-dots.bottom .running3, ++#dashtodockContainer.dashtodock.bottom .running3 { ++ background-image: url('./media/three_bottom.svg'); ++} ++ ++#dashtodockContainer.running-dots.top .running3, ++#dashtodockContainer.dashtodock.top .running3 { ++ background-image: url('./media/three_top.svg'); ++} ++ ++#dashtodockContainer.running-dots.left .running4, ++#dashtodockContainer.dashtodock.left .running4 { ++ background-image: url('./media/four.svg'); ++} ++ ++#dashtodockContainer.running-dots.right .running4, ++#dashtodockContainer.dashtodock.right .running4 { ++ background-image: url('./media/four_rtl.svg'); ++} ++ ++#dashtodockContainer.running-dots.bottom .running4, ++#dashtodockContainer.dashtodock.bottom .running4{ ++ background-image: url('./media/four_bottom.svg'); ++} ++ ++#dashtodockContainer.running-dots.top .running4, ++#dashtodockContainer.dashtodock.top .running4 { ++ background-image: url('./media/four_top.svg'); ++} ++ ++#dashtodockContainer.dashtodock #dash { ++ background: rgba(0,0,0,0.9); ++} ++ ++#dashtodockContainer.dashtodock:overview #dash { ++ background: rgba(0,0,0,0.5); ++ transition-duration: 250ms; ++} +-- +2.3.6 + + +From 93c5d76ce1bd57a1bffb6bb98e23406553b320bf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 20 May 2015 18:55:47 +0200 +Subject: [PATCH 3/3] Add panel-favorites extension + +--- + configure.ac | 5 +- + extensions/panel-favorites/Makefile.am | 3 + + extensions/panel-favorites/extension.js | 267 ++++++++++++++++++++++++++++ + extensions/panel-favorites/metadata.json.in | 10 ++ + extensions/panel-favorites/stylesheet.css | 14 ++ + 5 files changed, 297 insertions(+), 2 deletions(-) + create mode 100644 extensions/panel-favorites/Makefile.am + create mode 100644 extensions/panel-favorites/extension.js + create mode 100644 extensions/panel-favorites/metadata.json.in + create mode 100644 extensions/panel-favorites/stylesheet.css + +diff --git a/configure.ac b/configure.ac +index d40b9e0..92969e2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -29,7 +29,7 @@ AC_SUBST([SHELL_VERSION]) + dnl keep this in alphabetic order + CLASSIC_EXTENSIONS="apps-menu places-menu alternate-tab launch-new-instance window-list" + DEFAULT_EXTENSIONS="$CLASSIC_EXTENSIONS drive-menu screenshot-window-sizer windowsNavigator workspace-indicator" +-ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows dash-to-dock example native-window-placement systemMonitor top-icons user-theme" ++ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows dash-to-dock example native-window-placement panel-favorites systemMonitor top-icons user-theme" + AC_SUBST(CLASSIC_EXTENSIONS, [$CLASSIC_EXTENSIONS]) + AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS]) + AC_ARG_ENABLE([extensions], +@@ -66,7 +66,7 @@ for e in $enable_extensions; do + [AC_MSG_WARN([libgtop-2.0 not found, disabling systemMonitor])]) + ;; + dnl keep this in alphabetic order +- alternate-tab|apps-menu|auto-move-windows|dash-to-dock|drive-menu|example|launch-new-instance|native-window-placement|places-menu|screenshot-window-sizer|top-icons|user-theme|window-list|windowsNavigator|workspace-indicator) ++ alternate-tab|apps-menu|auto-move-windows|dash-to-dock|drive-menu|example|launch-new-instance|native-window-placement|panel-favorites|places-menu|screenshot-window-sizer|top-icons|user-theme|window-list|windowsNavigator|workspace-indicator) + ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e" + ;; + *) +@@ -87,6 +87,7 @@ AC_CONFIG_FILES([ + extensions/example/Makefile + extensions/launch-new-instance/Makefile + extensions/native-window-placement/Makefile ++ extensions/panel-favorites/Makefile + extensions/places-menu/Makefile + extensions/screenshot-window-sizer/Makefile + extensions/systemMonitor/Makefile +diff --git a/extensions/panel-favorites/Makefile.am b/extensions/panel-favorites/Makefile.am +new file mode 100644 +index 0000000..4ce3128 +--- /dev/null ++++ b/extensions/panel-favorites/Makefile.am +@@ -0,0 +1,3 @@ ++EXTENSION_ID = panel-favorites ++ ++include ../../extension.mk +diff --git a/extensions/panel-favorites/extension.js b/extensions/panel-favorites/extension.js +new file mode 100644 +index 0000000..b817dbb +--- /dev/null ++++ b/extensions/panel-favorites/extension.js +@@ -0,0 +1,267 @@ ++// Copyright (C) 2011-2013 R M Yorston ++// Licence: GPLv2+ ++ ++const Clutter = imports.gi.Clutter; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; ++const Lang = imports.lang; ++const Shell = imports.gi.Shell; ++const Signals = imports.signals; ++const St = imports.gi.St; ++const Mainloop = imports.mainloop; ++ ++const AppFavorites = imports.ui.appFavorites; ++const Main = imports.ui.main; ++const Panel = imports.ui.panel; ++const Tweener = imports.ui.tweener; ++ ++const PANEL_LAUNCHER_LABEL_SHOW_TIME = 0.15; ++const PANEL_LAUNCHER_LABEL_HIDE_TIME = 0.1; ++const PANEL_LAUNCHER_HOVER_TIMEOUT = 300; ++ ++const PanelLauncher = new Lang.Class({ ++ Name: 'PanelLauncher', ++ ++ _init: function(app) { ++ this.actor = new St.Button({ style_class: 'panel-button', ++ reactive: true }); ++ this.iconSize = 24; ++ let icon = app.create_icon_texture(this.iconSize); ++ this.actor.set_child(icon); ++ this.actor._delegate = this; ++ let text = app.get_name(); ++ if ( app.get_description() ) { ++ text += '\n' + app.get_description(); ++ } ++ ++ this.label = new St.Label({ style_class: 'panel-launcher-label'}); ++ this.label.set_text(text); ++ Main.layoutManager.addChrome(this.label); ++ this.label.hide(); ++ this.actor.label_actor = this.label; ++ ++ this._app = app; ++ this.actor.connect('clicked', Lang.bind(this, function() { ++ this._app.open_new_window(-1); ++ })); ++ this.actor.connect('notify::hover', ++ Lang.bind(this, this._onHoverChanged)); ++ this.actor.opacity = 207; ++ ++ this.actor.connect('notify::allocation', Lang.bind(this, this._alloc)); ++ }, ++ ++ _onHoverChanged: function(actor) { ++ actor.opacity = actor.hover ? 255 : 207; ++ }, ++ ++ _alloc: function() { ++ let size = this.actor.allocation.y2 - this.actor.allocation.y1 - 3; ++ if ( size >= 24 && size != this.iconSize ) { ++ this.actor.get_child().destroy(); ++ this.iconSize = size; ++ let icon = this._app.create_icon_texture(this.iconSize); ++ this.actor.set_child(icon); ++ } ++ }, ++ ++ showLabel: function() { ++ this.label.opacity = 0; ++ this.label.show(); ++ ++ let [stageX, stageY] = this.actor.get_transformed_position(); ++ ++ let itemHeight = this.actor.allocation.y2 - this.actor.allocation.y1; ++ let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1; ++ let labelWidth = this.label.get_width(); ++ ++ let node = this.label.get_theme_node(); ++ let yOffset = node.get_length('-y-offset'); ++ ++ let y = stageY + itemHeight + yOffset; ++ let x = Math.floor(stageX + itemWidth/2 - labelWidth/2); ++ ++ let parent = this.label.get_parent(); ++ let parentWidth = parent.allocation.x2 - parent.allocation.x1; ++ ++ if ( Clutter.get_default_text_direction() == Clutter.TextDirection.LTR ) { ++ // stop long tooltips falling off the right of the screen ++ x = Math.min(x, parentWidth-labelWidth-6); ++ // but whatever happens don't let them fall of the left ++ x = Math.max(x, 6); ++ } ++ else { ++ x = Math.max(x, 6); ++ x = Math.min(x, parentWidth-labelWidth-6); ++ } ++ ++ this.label.set_position(x, y); ++ Tweener.addTween(this.label, ++ { opacity: 255, ++ time: PANEL_LAUNCHER_LABEL_SHOW_TIME, ++ transition: 'easeOutQuad', ++ }); ++ }, ++ ++ hideLabel: function() { ++ this.label.opacity = 255; ++ Tweener.addTween(this.label, ++ { opacity: 0, ++ time: PANEL_LAUNCHER_LABEL_HIDE_TIME, ++ transition: 'easeOutQuad', ++ onComplete: Lang.bind(this, function() { ++ this.label.hide(); ++ }) ++ }); ++ }, ++ ++ destroy: function() { ++ this.label.destroy(); ++ this.actor.destroy(); ++ } ++}); ++ ++const PanelFavorites = new Lang.Class({ ++ Name: 'PanelFavorites', ++ ++ _init: function() { ++ this._showLabelTimeoutId = 0; ++ this._resetHoverTimeoutId = 0; ++ this._labelShowing = false; ++ ++ this.actor = new St.BoxLayout({ name: 'panelFavorites', ++ x_expand: true, y_expand: true, ++ style_class: 'panel-favorites' }); ++ this._display(); ++ ++ this.container = new St.Bin({ y_fill: true, ++ x_fill: true, ++ child: this.actor }); ++ ++ this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); ++ this._installChangedId = Shell.AppSystem.get_default().connect('installed-changed', Lang.bind(this, this._redisplay)); ++ this._changedId = AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._redisplay)); ++ }, ++ ++ _redisplay: function() { ++ for ( let i=0; i 0) { ++ Mainloop.source_remove(this._resetHoverTimeoutId); ++ this._resetHoverTimeoutId = 0; ++ } ++ } ++ } else { ++ if (this._showLabelTimeoutId > 0) { ++ Mainloop.source_remove(this._showLabelTimeoutId); ++ this._showLabelTimeoutId = 0; ++ } ++ launcher.hideLabel(); ++ if (this._labelShowing) { ++ this._resetHoverTimeoutId = Mainloop.timeout_add( ++ PANEL_LAUNCHER_HOVER_TIMEOUT, ++ Lang.bind(this, function() { ++ this._labelShowing = false; ++ this._resetHoverTimeoutId = 0; ++ return GLib.SOURCE_REMOVE; ++ })); ++ } ++ } ++ }, ++ ++ _onDestroy: function() { ++ if ( this._installChangedId != 0 ) { ++ Shell.AppSystem.get_default().disconnect(this._installChangedId); ++ this._installChangedId = 0; ++ } ++ ++ if ( this._changedId != 0 ) { ++ AppFavorites.getAppFavorites().disconnect(this._changedId); ++ this._changedId = 0; ++ } ++ } ++}); ++Signals.addSignalMethods(PanelFavorites.prototype); ++ ++let myAddToStatusArea; ++let panelFavorites; ++ ++function enable() { ++ Panel.Panel.prototype.myAddToStatusArea = myAddToStatusArea; ++ ++ // place panel to left of app menu, or failing that at right end of box ++ let siblings = Main.panel._leftBox.get_children(); ++ let appMenu = Main.panel.statusArea['appMenu']; ++ let pos = appMenu ? siblings.indexOf(appMenu.container) : siblings.length; ++ ++ panelFavorites = new PanelFavorites(); ++ Main.panel.myAddToStatusArea('panel-favorites', panelFavorites, ++ pos, 'left'); ++} ++ ++function disable() { ++ delete Panel.Panel.prototype.myAddToStatusArea; ++ ++ panelFavorites.actor.destroy(); ++ panelFavorites.emit('destroy'); ++ panelFavorites = null; ++} ++ ++function init() { ++ myAddToStatusArea = function(role, indicator, position, box) { ++ if (this.statusArea[role]) ++ throw new Error('Extension point conflict: there is already a status indicator for role ' + role); ++ ++ position = position || 0; ++ let boxes = { ++ left: this._leftBox, ++ center: this._centerBox, ++ right: this._rightBox ++ }; ++ let boxContainer = boxes[box] || this._rightBox; ++ this.statusArea[role] = indicator; ++ this._addToPanelBox(role, indicator, position, boxContainer); ++ return indicator; ++ }; ++} +diff --git a/extensions/panel-favorites/metadata.json.in b/extensions/panel-favorites/metadata.json.in +new file mode 100644 +index 0000000..037f281 +--- /dev/null ++++ b/extensions/panel-favorites/metadata.json.in +@@ -0,0 +1,10 @@ ++{ ++"extension-id": "@extension_id@", ++"uuid": "@uuid@", ++"settings-schema": "@gschemaname@", ++"gettext-domain": "@gettext_domain@", ++"name": "Frippery Panel Favorites", ++"description": "Add launchers for Favorites to the panel", ++"shell-version": [ "@shell_current@" ], ++"url": "http://intgat.tigress.co.uk/rmy/extensions/index.html" ++} +diff --git a/extensions/panel-favorites/stylesheet.css b/extensions/panel-favorites/stylesheet.css +new file mode 100644 +index 0000000..120adac +--- /dev/null ++++ b/extensions/panel-favorites/stylesheet.css +@@ -0,0 +1,14 @@ ++.panel-favorites { ++ spacing: 6px; ++} ++ ++.panel-launcher-label { ++ border-radius: 7px; ++ padding: 4px 12px; ++ background-color: rgba(0,0,0,0.9); ++ color: white; ++ text-align: center; ++ font-size: 9pt; ++ font-weight: bold; ++ -y-offset: 6px; ++} +-- +2.3.6 + diff --git a/SOURCES/fix-apps-menu-panel-shortcut.patch b/SOURCES/fix-apps-menu-panel-shortcut.patch new file mode 100644 index 0000000..032e4bc --- /dev/null +++ b/SOURCES/fix-apps-menu-panel-shortcut.patch @@ -0,0 +1,210 @@ +From 3ca39599e941563898b920a04192be0edb372470 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Mon, 23 Mar 2015 23:48:56 +0100 +Subject: [PATCH 1/3] apps-menu: Clean up signal code + +Setting up signal handlers inside a class and rely on outside code +to disconnect them via global variables is utterly weird. Just +disconnect everything inside the class when the corresponding actor +is destroyed. + +https://bugzilla.gnome.org/show_bug.cgi?id=746639 +--- + extensions/apps-menu/extension.js | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js +index 2d198c1..b392a91 100644 +--- a/extensions/apps-menu/extension.js ++++ b/extensions/apps-menu/extension.js +@@ -297,18 +297,19 @@ const ApplicationsButton = new Lang.Class({ + this.actor.label_actor = this._label; + + this.actor.connect('captured-event', Lang.bind(this, this._onCapturedEvent)); ++ this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); + +- _showingId = Main.overview.connect('showing', Lang.bind(this, function() { ++ this._showingId = Main.overview.connect('showing', Lang.bind(this, function() { + this.actor.add_accessible_state (Atk.StateType.CHECKED); + })); +- _hidingId = Main.overview.connect('hiding', Lang.bind(this, function() { ++ this._hidingId = Main.overview.connect('hiding', Lang.bind(this, function() { + this.actor.remove_accessible_state (Atk.StateType.CHECKED); + })); + + this.reloadFlag = false; + this._createLayout(); + this._display(); +- _installedChangedId = appSys.connect('installed-changed', Lang.bind(this, function() { ++ this._installedChangedId = appSys.connect('installed-changed', Lang.bind(this, function() { + if (this.menu.isOpen) { + this._redisplay(); + this.mainBox.show(); +@@ -320,7 +321,7 @@ const ApplicationsButton = new Lang.Class({ + // Since the hot corner uses stage coordinates, Clutter won't + // queue relayouts for us when the panel moves. Queue a relayout + // when that happens. +- _panelBoxChangedId = Main.layoutManager.connect('panel-box-changed', Lang.bind(this, function() { ++ this._panelBoxChangedId = Main.layoutManager.connect('panel-box-changed', Lang.bind(this, function() { + container.queue_relayout(); + })); + }, +@@ -336,6 +337,13 @@ const ApplicationsButton = new Lang.Class({ + return separator; + }, + ++ _onDestroy: function() { ++ Main.overview.disconnect(this._showingId); ++ Main.overview.disconnect(this._hidingId); ++ Main.layoutManager.disconnect(this._panelBoxChangedId); ++ appSys.disconnect(this._installedChangedId); ++ }, ++ + _onCapturedEvent: function(actor, event) { + if (event.type() == Clutter.EventType.BUTTON_PRESS) { + if (!Main.overview.shouldToggleByCornerOrButton()) +@@ -583,10 +591,6 @@ const ApplicationsButton = new Lang.Class({ + + let appsMenuButton; + let activitiesButton; +-let _hidingId; +-let _installedChangedId; +-let _panelBoxChangedId; +-let _showingId; + + function enable() { + activitiesButton = Main.panel.statusArea['activities']; +@@ -604,10 +608,6 @@ function enable() { + + function disable() { + Main.panel.menuManager.removeMenu(appsMenuButton.menu); +- appSys.disconnect(_installedChangedId); +- Main.layoutManager.disconnect(_panelBoxChangedId); +- Main.overview.disconnect(_hidingId); +- Main.overview.disconnect(_showingId); + appsMenuButton.destroy(); + activitiesButton.container.show(); + +-- +2.5.0 + + +From ddd92a1cdd2b9ab8e2ba054c8a2a131ae277808d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Mon, 23 Mar 2015 23:55:43 +0100 +Subject: [PATCH 2/3] apps-menu: Move panel-main-menu handling into + AppsMenuButton + +This is really where it belongs, and will make an upcoming fix slightly +less ugly ... + +https://bugzilla.gnome.org/show_bug.cgi?id=746639 +--- + extensions/apps-menu/extension.js | 31 +++++++++++++++++-------------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js +index b392a91..03a50b7 100644 +--- a/extensions/apps-menu/extension.js ++++ b/extensions/apps-menu/extension.js +@@ -305,6 +305,7 @@ const ApplicationsButton = new Lang.Class({ + this._hidingId = Main.overview.connect('hiding', Lang.bind(this, function() { + this.actor.remove_accessible_state (Atk.StateType.CHECKED); + })); ++ this._setKeybinding(); + + this.reloadFlag = false; + this._createLayout(); +@@ -342,6 +343,13 @@ const ApplicationsButton = new Lang.Class({ + Main.overview.disconnect(this._hidingId); + Main.layoutManager.disconnect(this._panelBoxChangedId); + appSys.disconnect(this._installedChangedId); ++ ++ Main.wm.setCustomKeybindingHandler('panel-main-menu', ++ Shell.KeyBindingMode.NORMAL | ++ Shell.KeyBindingMode.OVERVIEW, ++ Main.sessionMode.hasOverview ? ++ Lang.bind(Main.overview, Main.overview.toggle) : ++ null); + }, + + _onCapturedEvent: function(actor, event) { +@@ -389,6 +397,15 @@ const ApplicationsButton = new Lang.Class({ + this.parent(menu, open); + }, + ++ _setKeybinding: function() { ++ Main.wm.setCustomKeybindingHandler('panel-main-menu', ++ Shell.KeyBindingMode.NORMAL | ++ Shell.KeyBindingMode.OVERVIEW, ++ Lang.bind(this, function() { ++ this.menu.toggle(); ++ })); ++ }, ++ + _redisplay: function() { + this.applicationsBox.destroy_all_children(); + this.categoriesBox.destroy_all_children(); +@@ -597,26 +614,12 @@ function enable() { + activitiesButton.container.hide(); + appsMenuButton = new ApplicationsButton(); + Main.panel.addToStatusArea('apps-menu', appsMenuButton, 1, 'left'); +- +- Main.wm.setCustomKeybindingHandler('panel-main-menu', +- Shell.KeyBindingMode.NORMAL | +- Shell.KeyBindingMode.OVERVIEW, +- function() { +- appsMenuButton.menu.toggle(); +- }); + } + + function disable() { + Main.panel.menuManager.removeMenu(appsMenuButton.menu); + appsMenuButton.destroy(); + activitiesButton.container.show(); +- +- Main.wm.setCustomKeybindingHandler('panel-main-menu', +- Shell.KeyBindingMode.NORMAL | +- Shell.KeyBindingMode.OVERVIEW, +- Main.sessionMode.hasOverview ? +- Lang.bind(Main.overview, Main.overview.toggle) : +- null); + } + + function init(metadata) { +-- +2.5.0 + + +From cff31d811ece77cf6eae017c6e7223f87c67cacc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 24 Mar 2015 00:28:10 +0100 +Subject: [PATCH 3/3] apps-menu: Take over shortcuts again on startup-complete + +For a while now, gnome-shell has initialized extensions before +setting up its own keybinding handling. As a result, our taking +over of the panel-main-menu shortcut will be overwritten when +the extension is enabled at startup - work around this by setting +up the keybinding again on LayoutManager::startup-complete. + +https://bugzilla.gnome.org/show_bug.cgi?id=746639 +--- + extensions/apps-menu/extension.js | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js +index 03a50b7..719f298 100644 +--- a/extensions/apps-menu/extension.js ++++ b/extensions/apps-menu/extension.js +@@ -305,6 +305,8 @@ const ApplicationsButton = new Lang.Class({ + this._hidingId = Main.overview.connect('hiding', Lang.bind(this, function() { + this.actor.remove_accessible_state (Atk.StateType.CHECKED); + })); ++ Main.layoutManager.connect('startup-complete', ++ Lang.bind(this, this._setKeybinding)); + this._setKeybinding(); + + this.reloadFlag = false; +-- +2.5.0 + diff --git a/SOURCES/multi-monitor-window-list.patch b/SOURCES/multi-monitor-window-list.patch new file mode 100644 index 0000000..2fdead1 --- /dev/null +++ b/SOURCES/multi-monitor-window-list.patch @@ -0,0 +1,1177 @@ +From a69a71fafe3222026c938a0832f350654fe05c5c Mon Sep 17 00:00:00 2001 +From: Sylvain Pasche +Date: Mon, 10 Nov 2014 21:35:27 +0100 +Subject: [PATCH 1/5] window-list: Refactoring to use an Extension object + +Move the global state into a new Extension object. This is in +preparation for adding more logic to the Extension object. + +https://bugzilla.gnome.org/show_bug.cgi?id=737486 +--- + extensions/window-list/extension.js | 81 +++++++++++++++++++++---------------- + 1 file changed, 46 insertions(+), 35 deletions(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index f37c850..8589c43 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -53,7 +53,7 @@ function _onMenuStateChanged(menu, isOpen) { + + let [x, y,] = global.get_pointer(); + let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); +- if (windowList.actor.contains(actor)) ++ if (Me.stateObj.windowListContains(actor)) + actor.sync_hover(); + } + +@@ -1196,49 +1196,60 @@ const WindowList = new Lang.Class({ + } + }); + +-let windowList; +-let injections = {}; +-let notificationParent; ++const Extension = new Lang.Class({ ++ Name: 'Extension', + +-function init() { +-} ++ _init: function() { ++ this._windowList = null; ++ this._injections = {}; ++ this._notificationParent = null; ++ }, + +-function enable() { +- windowList = new WindowList(); ++ enable: function() { ++ this._windowList = new WindowList(); ++ let windowListActor = this._windowList.actor; + +- windowList.actor.connect('notify::hover', Lang.bind(Main.messageTray, +- function() { +- this._pointerInNotification = windowList.actor.hover; +- this._updateState(); +- })); ++ windowListActor.connect('notify::hover', Lang.bind(Main.messageTray, ++ function() { ++ this._pointerInNotification = windowListActor.hover; ++ this._updateState(); ++ })); + +- injections['_trayDwellTimeout'] = MessageTray.MessageTray.prototype._trayDwellTimeout; +- MessageTray.MessageTray.prototype._trayDwellTimeout = function() { +- return false; +- }; ++ this._injections['_trayDwellTimeout'] = ++ MessageTray.MessageTray.prototype._trayDwellTimeout; ++ MessageTray.MessageTray.prototype._trayDwellTimeout = function() { ++ return false; ++ }; + +- notificationParent = Main.messageTray._notificationWidget.get_parent(); +- Main.messageTray._notificationWidget.hide(); +- Main.messageTray._notificationWidget.reparent(windowList.actor); +- Main.messageTray._notificationWidget.show(); +-} ++ this._notificationParent = Main.messageTray._notificationWidget.get_parent(); ++ Main.messageTray._notificationWidget.hide(); ++ Main.messageTray._notificationWidget.reparent(windowListActor); ++ Main.messageTray._notificationWidget.show(); ++ }, + +-function disable() { +- var prop; ++ disable: function() { ++ if (!this._windowList) ++ return; + +- if (!windowList) +- return; ++ this._windowList.actor.hide(); + +- windowList.actor.hide(); ++ if (this._notificationParent) { ++ Main.messageTray._notificationWidget.reparent(this._notificationParent); ++ this._notificationParent = null; ++ } + +- if (notificationParent) { +- Main.messageTray._notificationWidget.reparent(notificationParent); +- notificationParent = null; +- } ++ this._windowList.actor.destroy(); ++ this._windowList = null; + +- windowList.actor.destroy(); +- windowList = null; ++ for (let prop in this._injections) ++ MessageTray.MessageTray.prototype[prop] = this._injections[prop]; ++ }, + +- for (prop in injections) +- MessageTray.MessageTray.prototype[prop] = injections[prop]; ++ windowListContains: function(actor) { ++ return this._windowList.actor.contains(actor); ++ } ++}); ++ ++function init() { ++ return new Extension(); + } +-- +2.5.0 + + +From ca4b95594d10e80d4b3a430d4a2b3fb79472970d Mon Sep 17 00:00:00 2001 +From: Sylvain Pasche +Date: Mon, 10 Nov 2014 21:37:22 +0100 +Subject: [PATCH 2/5] window-list: Move messageTray patching to the WindowList + class + +Move messageTray patching form the Extension object to the WindowList +class. Moreover, only do the patching if the window list is on the bottom +monitor. This refactoring will make it easier to have several instances +of WindowList (one on each monitor). + +https://bugzilla.gnome.org/show_bug.cgi?id=737486 +--- + extensions/window-list/extension.js | 58 ++++++++++++++++++++++--------------- + 1 file changed, 35 insertions(+), 23 deletions(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 8589c43..d537f7c 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -858,6 +858,24 @@ const WindowList = new Lang.Class({ + this._updateKeyboardAnchor(); + this._updateMessageTrayAnchor(); + })); ++ ++ this._isOnBottomMonitor = Main.layoutManager.primaryIndex == Main.layoutManager.bottomIndex; ++ ++ if (this._isOnBottomMonitor) { ++ let actor = this.actor; ++ this._bottomHoverChangedId = ++ actor.connect('notify::hover', Lang.bind(Main.messageTray, ++ function() { ++ this._pointerInNotification = actor.hover; ++ this._updateState(); ++ })); ++ ++ this._notificationParent = Main.messageTray._notificationWidget.get_parent(); ++ Main.messageTray._notificationWidget.hide(); ++ Main.messageTray._notificationWidget.reparent(this.actor); ++ Main.messageTray._notificationWidget.show(); ++ } ++ + this._updateMessageTrayAnchor(); + + this._fullscreenChangedId = +@@ -995,8 +1013,10 @@ const WindowList = new Lang.Class({ + }, + + _updateMessageTrayAnchor: function() { +- let sameMonitor = Main.layoutManager.primaryIndex == Main.layoutManager.bottomIndex; +- let anchorY = this.actor.visible && sameMonitor ? this.actor.height : 0; ++ if (!this._isOnBottomMonitor) ++ return; ++ ++ let anchorY = this.actor.visible ? this.actor.height : 0; + + Main.messageTray.actor.anchor_y = anchorY; + Main.messageTray._notificationWidget.anchor_y = -anchorY; +@@ -1177,8 +1197,19 @@ const WindowList = new Lang.Class({ + global.window_manager.disconnect(this._switchWorkspaceId); + this._switchWorkspaceId = 0; + +- Main.messageTray.actor.anchor_y = 0; +- Main.messageTray._notificationWidget.anchor_y = 0; ++ if (this._bottomHoverChangedId) ++ this.actor.disconnect(this._bottomHoverChangedId); ++ this._bottomHoverChangedId = 0; ++ ++ if (this._notificationParent) { ++ Main.messageTray._notificationWidget.reparent(this._notificationParent); ++ this._notificationParent = null; ++ } ++ ++ if (this._isOnBottomMonitor) { ++ Main.messageTray.actor.anchor_y = 0; ++ Main.messageTray._notificationWidget.anchor_y = 0; ++ } + + Main.overview.disconnect(this._overviewShowingId); + Main.overview.disconnect(this._overviewHidingId); +@@ -1202,29 +1233,16 @@ const Extension = new Lang.Class({ + _init: function() { + this._windowList = null; + this._injections = {}; +- this._notificationParent = null; + }, + + enable: function() { + this._windowList = new WindowList(); +- let windowListActor = this._windowList.actor; +- +- windowListActor.connect('notify::hover', Lang.bind(Main.messageTray, +- function() { +- this._pointerInNotification = windowListActor.hover; +- this._updateState(); +- })); + + this._injections['_trayDwellTimeout'] = + MessageTray.MessageTray.prototype._trayDwellTimeout; + MessageTray.MessageTray.prototype._trayDwellTimeout = function() { + return false; + }; +- +- this._notificationParent = Main.messageTray._notificationWidget.get_parent(); +- Main.messageTray._notificationWidget.hide(); +- Main.messageTray._notificationWidget.reparent(windowListActor); +- Main.messageTray._notificationWidget.show(); + }, + + disable: function() { +@@ -1232,12 +1250,6 @@ const Extension = new Lang.Class({ + return; + + this._windowList.actor.hide(); +- +- if (this._notificationParent) { +- Main.messageTray._notificationWidget.reparent(this._notificationParent); +- this._notificationParent = null; +- } +- + this._windowList.actor.destroy(); + this._windowList = null; + +-- +2.5.0 + + +From 352352112596ea4b6d21120b2c6d49dcabf0d0c2 Mon Sep 17 00:00:00 2001 +From: Sylvain Pasche +Date: Mon, 10 Nov 2014 21:37:29 +0100 +Subject: [PATCH 3/5] window-list: Refactor {Window,App}Button shared code into + BaseButton + +BaseButton is a new class that shares the common logic of WindowButton +and AppButton. AppButton is passed to AppContextMenu so that it can reuse +code from the now public getWindowList() method. + +https://bugzilla.gnome.org/show_bug.cgi?id=737486 +--- + extensions/window-list/extension.js | 233 +++++++++++++++++++----------------- + 1 file changed, 123 insertions(+), 110 deletions(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index d537f7c..897f448 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -195,47 +195,30 @@ const WindowTitle = new Lang.Class({ + }); + + +-const WindowButton = new Lang.Class({ +- Name: 'WindowButton', +- +- _init: function(metaWindow) { +- this.metaWindow = metaWindow; ++const BaseButton = new Lang.Class({ ++ Name: 'BaseButton', ++ Abstract: true, + +- this._windowTitle = new WindowTitle(this.metaWindow); ++ _init: function() { + this.actor = new St.Button({ style_class: 'window-button', + x_fill: true, + y_fill: true, + can_focus: true, + button_mask: St.ButtonMask.ONE | +- St.ButtonMask.THREE, +- child: this._windowTitle.actor }); ++ St.ButtonMask.THREE }); + this.actor._delegate = this; + +- this._menuManager = new PopupMenu.PopupMenuManager(this); +- this._contextMenu = new WindowContextMenu(this.actor, this.metaWindow); +- this._contextMenu.connect('open-state-changed', _onMenuStateChanged); +- this._contextMenu.actor.hide(); +- this._menuManager.addMenu(this._contextMenu); +- Main.uiGroup.add_actor(this._contextMenu.actor); +- + this.actor.connect('allocation-changed', + Lang.bind(this, this._updateIconGeometry)); + this.actor.connect('clicked', Lang.bind(this, this._onClicked)); + this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); + this.actor.connect('popup-menu', Lang.bind(this, this._onPopupMenu)); + ++ this._contextMenuManager = new PopupMenu.PopupMenuManager(this); ++ + this._switchWorkspaceId = + global.window_manager.connect('switch-workspace', + Lang.bind(this, this._updateVisibility)); +- this._workspaceChangedId = +- this.metaWindow.connect('workspace-changed', +- Lang.bind(this, this._updateVisibility)); +- this._updateVisibility(); +- +- this._notifyFocusId = +- global.display.connect('notify::focus-window', +- Lang.bind(this, this._updateStyle)); +- this._updateStyle(); + }, + + get active() { +@@ -250,6 +233,89 @@ const WindowButton = new Lang.Class({ + }, + + _onClicked: function(actor, button) { ++ throw new Error('Not implemented'); ++ }, ++ ++ _canOpenPopupMenu: function() { ++ return true; ++ }, ++ ++ _onPopupMenu: function(actor) { ++ if (!this._canOpenPopupMenu() || this._contextMenu.isOpen) ++ return; ++ _openMenu(this._contextMenu); ++ }, ++ ++ _isFocused: function() { ++ throw new Error('Not implemented'); ++ }, ++ ++ _updateStyle: function() { ++ if (this._isFocused()) ++ this.actor.add_style_class_name('focused'); ++ else ++ this.actor.remove_style_class_name('focused'); ++ }, ++ ++ _isWindowVisible: function(window) { ++ let workspace = global.screen.get_active_workspace(); ++ ++ return !window.skip_taskbar && window.located_on_workspace(workspace); ++ }, ++ ++ _updateVisibility: function() { ++ throw new Error('Not implemented'); ++ }, ++ ++ _getIconGeometry: function() { ++ let rect = new Meta.Rectangle(); ++ ++ [rect.x, rect.y] = this.actor.get_transformed_position(); ++ [rect.width, rect.height] = this.actor.get_transformed_size(); ++ ++ return rect; ++ }, ++ ++ _updateIconGeometry: function() { ++ throw new Error('Not implemented'); ++ }, ++ ++ _onDestroy: function() { ++ global.window_manager.disconnect(this._switchWorkspaceId); ++ } ++}); ++ ++ ++const WindowButton = new Lang.Class({ ++ Name: 'WindowButton', ++ Extends: BaseButton, ++ ++ _init: function(metaWindow) { ++ this.parent(); ++ ++ this.metaWindow = metaWindow; ++ this._updateVisibility(); ++ ++ this._windowTitle = new WindowTitle(this.metaWindow); ++ this.actor.set_child(this._windowTitle.actor); ++ ++ this._contextMenu = new WindowContextMenu(this.actor, this.metaWindow); ++ this._contextMenu.connect('open-state-changed', _onMenuStateChanged); ++ this._contextMenu.actor.hide(); ++ this._contextMenuManager.addMenu(this._contextMenu); ++ Main.uiGroup.add_actor(this._contextMenu.actor); ++ ++ this._workspaceChangedId = ++ this.metaWindow.connect('workspace-changed', ++ Lang.bind(this, this._updateVisibility)); ++ ++ this._notifyFocusId = ++ global.display.connect('notify::focus-window', ++ Lang.bind(this, this._updateStyle)); ++ this._updateStyle(); ++ }, ++ ++ _onClicked: function(actor, button) { + if (this._contextMenu.isOpen) { + this._contextMenu.close(); + return; +@@ -261,41 +327,30 @@ const WindowButton = new Lang.Class({ + _openMenu(this._contextMenu); + }, + +- _onPopupMenu: function(actor) { +- if (this._contextMenu.isOpen) +- return; +- _openMenu(this._contextMenu); ++ _isFocused: function() { ++ return global.display.focus_window == this.metaWindow; + }, + + _updateStyle: function() { ++ this.parent(); ++ + if (this.metaWindow.minimized) + this.actor.add_style_class_name('minimized'); + else + this.actor.remove_style_class_name('minimized'); +- +- if (global.display.focus_window == this.metaWindow) +- this.actor.add_style_class_name('focused'); +- else +- this.actor.remove_style_class_name('focused'); + }, + + _updateVisibility: function() { +- let workspace = global.screen.get_active_workspace(); +- this.actor.visible = this.metaWindow.located_on_workspace(workspace); ++ this.actor.visible = this._isWindowVisible(this.metaWindow); + }, + + _updateIconGeometry: function() { +- let rect = new Meta.Rectangle(); +- +- [rect.x, rect.y] = this.actor.get_transformed_position(); +- [rect.width, rect.height] = this.actor.get_transformed_size(); +- +- this.metaWindow.set_icon_geometry(rect); ++ this.metaWindow.set_icon_geometry(this._getIconGeometry()); + }, + + _onDestroy: function() { ++ this.parent(); + this.metaWindow.disconnect(this._workspaceChangedId); +- global.window_manager.disconnect(this._switchWorkspaceId); + global.display.disconnect(this._notifyFocusId); + this._contextMenu.destroy(); + } +@@ -306,14 +361,14 @@ const AppContextMenu = new Lang.Class({ + Name: 'AppContextMenu', + Extends: PopupMenu.PopupMenu, + +- _init: function(source, app) { ++ _init: function(source, appButton) { + this.parent(source, 0.5, St.Side.BOTTOM); + +- this._app = app; ++ this._appButton = appButton; + + this._minimizeItem = new PopupMenu.PopupMenuItem(_("Minimize all")); + this._minimizeItem.connect('activate', Lang.bind(this, function() { +- this._getWindowList().forEach(function(w) { ++ this._appButton.getWindowList().forEach(function(w) { + w.minimize(); + }); + })); +@@ -321,7 +376,7 @@ const AppContextMenu = new Lang.Class({ + + this._unminimizeItem = new PopupMenu.PopupMenuItem(_("Unminimize all")); + this._unminimizeItem.connect('activate', Lang.bind(this, function() { +- this._getWindowList().forEach(function(w) { ++ this._appButton.getWindowList().forEach(function(w) { + w.unminimize(); + }); + })); +@@ -329,7 +384,7 @@ const AppContextMenu = new Lang.Class({ + + this._maximizeItem = new PopupMenu.PopupMenuItem(_("Maximize all")); + this._maximizeItem.connect('activate', Lang.bind(this, function() { +- this._getWindowList().forEach(function(w) { ++ this._appButton.getWindowList().forEach(function(w) { + w.maximize(Meta.MaximizeFlags.HORIZONTAL | + Meta.MaximizeFlags.VERTICAL); + }); +@@ -338,7 +393,7 @@ const AppContextMenu = new Lang.Class({ + + this._unmaximizeItem = new PopupMenu.PopupMenuItem(_("Unmaximize all")); + this._unmaximizeItem.connect('activate', Lang.bind(this, function() { +- this._getWindowList().forEach(function(w) { ++ this._appButton.getWindowList().forEach(function(w) { + w.unmaximize(Meta.MaximizeFlags.HORIZONTAL | + Meta.MaximizeFlags.VERTICAL); + }); +@@ -347,22 +402,15 @@ const AppContextMenu = new Lang.Class({ + + let item = new PopupMenu.PopupMenuItem(_("Close all")); + item.connect('activate', Lang.bind(this, function() { +- this._getWindowList().forEach(function(w) { ++ this._appButton.getWindowList().forEach(function(w) { + w.delete(global.get_current_time()); + }); + })); + this.addMenuItem(item); + }, + +- _getWindowList: function() { +- let workspace = global.screen.get_active_workspace(); +- return this._app.get_windows().filter(function(win) { +- return !win.skip_taskbar && win.located_on_workspace(workspace); +- }); +- }, +- + open: function(animate) { +- let windows = this._getWindowList(); ++ let windows = this._appButton.getWindowList(); + this._minimizeItem.actor.visible = windows.some(function(w) { + return !w.minimized; + }); +@@ -382,21 +430,16 @@ const AppContextMenu = new Lang.Class({ + + const AppButton = new Lang.Class({ + Name: 'AppButton', ++ Extends: BaseButton, + + _init: function(app) { ++ this.parent(); ++ + this.app = app; ++ this._updateVisibility(); + + let stack = new St.Widget({ layout_manager: new Clutter.BinLayout() }); +- this.actor = new St.Button({ style_class: 'window-button', +- x_fill: true, +- can_focus: true, +- button_mask: St.ButtonMask.ONE | +- St.ButtonMask.THREE, +- child: stack }); +- this.actor._delegate = this; +- +- this.actor.connect('allocation-changed', +- Lang.bind(this, this._updateIconGeometry)); ++ this.actor.set_child(stack); + + this._singleWindowTitle = new St.Bin({ x_expand: true, + y_fill: true, +@@ -421,8 +464,7 @@ const AppButton = new Lang.Class({ + this._menuManager.addMenu(this._menu); + Main.uiGroup.add_actor(this._menu.actor); + +- this._contextMenuManager = new PopupMenu.PopupMenuManager(this); +- this._appContextMenu = new AppContextMenu(this.actor, this.app); ++ this._appContextMenu = new AppContextMenu(this.actor, this); + this._appContextMenu.connect('open-state-changed', _onMenuStateChanged); + this._appContextMenu.actor.hide(); + Main.uiGroup.add_actor(this._appContextMenu.actor); +@@ -433,14 +475,6 @@ const AppButton = new Lang.Class({ + function() { + this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE); + })); +- this.actor.connect('clicked', Lang.bind(this, this._onClicked)); +- this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); +- this.actor.connect('popup-menu', Lang.bind(this, this._onPopupMenu)); +- +- this._switchWorkspaceId = +- global.window_manager.connect('switch-workspace', +- Lang.bind(this, this._updateVisibility)); +- this._updateVisibility(); + + this._windowsChangedId = + this.app.connect('windows-changed', +@@ -459,18 +493,12 @@ const AppButton = new Lang.Class({ + this.actor.visible = this.app.is_on_workspace(workspace); + }, + +- _updateStyle: function() { +- if (this._windowTracker.focus_app == this.app) +- this.actor.add_style_class_name('focused'); +- else +- this.actor.remove_style_class_name('focused'); ++ _isFocused: function() { ++ return this._windowTracker.focus_app == this.app; + }, + + _updateIconGeometry: function() { +- let rect = new Meta.Rectangle(); +- +- [rect.x, rect.y] = this.actor.get_transformed_position(); +- [rect.width, rect.height] = this.actor.get_transformed_size(); ++ let rect = this._getIconGeometry(); + + let windows = this.app.get_windows(); + windows.forEach(function(w) { +@@ -479,15 +507,14 @@ const AppButton = new Lang.Class({ + }, + + +- _getWindowList: function() { +- let workspace = global.screen.get_active_workspace(); +- return this.app.get_windows().filter(function(win) { +- return !win.skip_taskbar && win.located_on_workspace(workspace); +- }); ++ getWindowList: function() { ++ return this.app.get_windows().filter(Lang.bind(this, function(win) { ++ return this._isWindowVisible(win); ++ })); + }, + + _windowsChanged: function() { +- let windows = this._getWindowList(); ++ let windows = this.getWindowList(); + this._singleWindowTitle.visible = windows.length == 1; + this._multiWindowTitle.visible = !this._singleWindowTitle.visible; + +@@ -519,17 +546,6 @@ const AppButton = new Lang.Class({ + + }, + +- get active() { +- return this.actor.has_style_class_name('focused'); +- }, +- +- activate: function() { +- if (this.active) +- return; +- +- this._onClicked(this.actor, 1); +- }, +- + _onClicked: function(actor, button) { + let menuWasOpen = this._menu.isOpen; + if (menuWasOpen) +@@ -543,7 +559,7 @@ const AppButton = new Lang.Class({ + if (menuWasOpen) + return; + +- let windows = this._getWindowList(); ++ let windows = this.getWindowList(); + if (windows.length == 1) { + if (contextMenuWasOpen) + return; +@@ -567,20 +583,17 @@ const AppButton = new Lang.Class({ + } + }, + +- _onPopupMenu: function(actor) { +- if (this._menu.isOpen || this._contextMenu.isOpen) +- return; +- _openMenu(this._contextMenu); ++ _canOpenPopupMenu: function() { ++ return !this._menu.isOpen; + }, + +- + _onMenuActivate: function(menu, child) { + child._window.activate(global.get_current_time()); + }, + + _onDestroy: function() { ++ this.parent(); + this._textureCache.disconnect(this._iconThemeChangedId); +- global.window_manager.disconnect(this._switchWorkspaceId); + this._windowTracker.disconnect(this._notifyFocusId); + this.app.disconnect(this._windowsChangedId); + this._menu.destroy(); +-- +2.5.0 + + +From e8853c4a5e35a0e78d29fe3a861891533e8ac723 Mon Sep 17 00:00:00 2001 +From: Sylvain Pasche +Date: Sun, 16 Nov 2014 16:03:39 +0100 +Subject: [PATCH 4/5] window-list: Option to show the window list on all + monitors + +A new setting "show-on-all-monitors" (false by default) is available to +show window lists on all connected monitors. +The Extension object monitors conditions that require the list of +windows to be rebuilt. The WindowList and Button classes have a new +"perMonitor" property that indicates they should handle windows on +their own monitor only. + +https://bugzilla.gnome.org/show_bug.cgi?id=737486 +--- + extensions/window-list/extension.js | 170 ++++++++++++++++----- + ...ome.shell.extensions.window-list.gschema.xml.in | 8 + + extensions/window-list/prefs.js | 20 ++- + 3 files changed, 157 insertions(+), 41 deletions(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 897f448..4f92c3c 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -53,7 +53,7 @@ function _onMenuStateChanged(menu, isOpen) { + + let [x, y,] = global.get_pointer(); + let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); +- if (Me.stateObj.windowListContains(actor)) ++ if (Me.stateObj.someWindowListContains(actor)) + actor.sync_hover(); + } + +@@ -199,7 +199,10 @@ const BaseButton = new Lang.Class({ + Name: 'BaseButton', + Abstract: true, + +- _init: function() { ++ _init: function(perMonitor, monitorIndex) { ++ this._perMonitor = perMonitor; ++ this._monitorIndex = monitorIndex; ++ + this.actor = new St.Button({ style_class: 'window-button', + x_fill: true, + y_fill: true, +@@ -219,6 +222,15 @@ const BaseButton = new Lang.Class({ + this._switchWorkspaceId = + global.window_manager.connect('switch-workspace', + Lang.bind(this, this._updateVisibility)); ++ ++ if (this._perMonitor) { ++ this._windowEnteredMonitorId = ++ global.screen.connect('window-entered-monitor', ++ Lang.bind(this, this._windowEnteredOrLeftMonitor)); ++ this._windowLeftMonitorId = ++ global.screen.connect('window-left-monitor', ++ Lang.bind(this, this._windowEnteredOrLeftMonitor)); ++ } + }, + + get active() { +@@ -257,10 +269,16 @@ const BaseButton = new Lang.Class({ + this.actor.remove_style_class_name('focused'); + }, + ++ _windowEnteredOrLeftMonitor: function(metaScreen, monitorIndex, metaWindow) { ++ throw new Error('Not implemented'); ++ }, ++ + _isWindowVisible: function(window) { + let workspace = global.screen.get_active_workspace(); + +- return !window.skip_taskbar && window.located_on_workspace(workspace); ++ return !window.skip_taskbar && ++ window.located_on_workspace(workspace) && ++ (!this._perMonitor || window.get_monitor() == this._monitorIndex); + }, + + _updateVisibility: function() { +@@ -282,6 +300,14 @@ const BaseButton = new Lang.Class({ + + _onDestroy: function() { + global.window_manager.disconnect(this._switchWorkspaceId); ++ ++ if (this._windowEnteredMonitorId) ++ global.screen.disconnect(this._windowEnteredMonitorId); ++ this._windowEnteredMonitorId = 0; ++ ++ if (this._windowLeftMonitorId) ++ global.screen.disconnect(this._windowLeftMonitorId); ++ this._windowLeftMonitorId = 0; + } + }); + +@@ -290,8 +316,8 @@ const WindowButton = new Lang.Class({ + Name: 'WindowButton', + Extends: BaseButton, + +- _init: function(metaWindow) { +- this.parent(); ++ _init: function(metaWindow, perMonitor, monitorIndex) { ++ this.parent(perMonitor, monitorIndex); + + this.metaWindow = metaWindow; + this._updateVisibility(); +@@ -340,6 +366,11 @@ const WindowButton = new Lang.Class({ + this.actor.remove_style_class_name('minimized'); + }, + ++ _windowEnteredOrLeftMonitor: function(metaScreen, monitorIndex, metaWindow) { ++ if (monitorIndex == this._monitorIndex && metaWindow == this.metaWindow) ++ this._updateVisibility(); ++ }, ++ + _updateVisibility: function() { + this.actor.visible = this._isWindowVisible(this.metaWindow); + }, +@@ -432,8 +463,8 @@ const AppButton = new Lang.Class({ + Name: 'AppButton', + Extends: BaseButton, + +- _init: function(app) { +- this.parent(); ++ _init: function(app, perMonitor, monitorIndex) { ++ this.parent(perMonitor, monitorIndex); + + this.app = app; + this._updateVisibility(); +@@ -488,9 +519,22 @@ const AppButton = new Lang.Class({ + this._updateStyle(); + }, + ++ _windowEnteredOrLeftMonitor: function(metaScreen, monitorIndex, metaWindow) { ++ if (this._windowTracker.get_window_app(metaWindow) == this.app && ++ monitorIndex == this._monitorIndex) { ++ this._updateVisibility(); ++ this._windowsChanged(); ++ } ++ }, ++ + _updateVisibility: function() { +- let workspace = global.screen.get_active_workspace(); +- this.actor.visible = this.app.is_on_workspace(workspace); ++ if (!this._perMonitor) { ++ // fast path: use ShellApp API to avoid iterating over all windows. ++ let workspace = global.screen.get_active_workspace(); ++ this.actor.visible = this.app.is_on_workspace(workspace); ++ } else { ++ this.actor.visible = this.getWindowList().length >= 1; ++ } + }, + + _isFocused: function() { +@@ -779,7 +823,10 @@ const WorkspaceIndicator = new Lang.Class({ + const WindowList = new Lang.Class({ + Name: 'WindowList', + +- _init: function() { ++ _init: function(perMonitor, monitor) { ++ this._perMonitor = perMonitor; ++ this._monitor = monitor; ++ + this.actor = new St.Widget({ name: 'panel', + style_class: 'bottom-panel', + reactive: true, +@@ -813,27 +860,36 @@ const WindowList = new Lang.Class({ + this._workspaceIndicator = new WorkspaceIndicator(); + indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true }); + ++ this._workspaceSettings = new Gio.Settings({ schema_id: 'org.gnome.shell.overrides' }); ++ this._workspacesOnlyOnPrimaryChangedId = ++ this._workspaceSettings.connect('changed::workspaces-only-on-primary', ++ Lang.bind(this, this._updateWorkspaceIndicatorVisibility)); ++ this._updateWorkspaceIndicatorVisibility(); ++ + this._menuManager = new PopupMenu.PopupMenuManager(this); + this._menuManager.addMenu(this._workspaceIndicator.menu); + +- this._trayButton = new TrayButton(); +- indicatorsBox.add(this._trayButton.actor, { expand: false }); ++ this._isOnBottomMonitor = this._monitor == Main.layoutManager.bottomMonitor; ++ ++ if (this._isOnBottomMonitor) { ++ this._trayButton = new TrayButton(); ++ indicatorsBox.add(this._trayButton.actor, { expand: false }); ++ } + + Main.layoutManager.addChrome(this.actor, { affectsStruts: true, + trackFullscreen: true }); + Main.uiGroup.set_child_above_sibling(this.actor, Main.layoutManager.trayBox); + Main.ctrlAltTabManager.addGroup(this.actor, _("Window List"), 'start-here-symbolic'); + ++ this.actor.width = this._monitor.width; ++ this.actor.connect('notify::height', Lang.bind(this, this._updatePosition)); ++ this._updatePosition(); ++ + this._appSystem = Shell.AppSystem.get_default(); + this._appStateChangedId = + this._appSystem.connect('app-state-changed', + Lang.bind(this, this._onAppStateChanged)); + +- this._monitorsChangedId = +- Main.layoutManager.connect('monitors-changed', +- Lang.bind(this, this._updatePosition)); +- this.actor.connect('notify::height', Lang.bind(this, this._updatePosition)); +- this._updatePosition(); + + this._keyboardVisiblechangedId = + Main.layoutManager.connect('keyboard-visible-changed', +@@ -872,8 +928,6 @@ const WindowList = new Lang.Class({ + this._updateMessageTrayAnchor(); + })); + +- this._isOnBottomMonitor = Main.layoutManager.primaryIndex == Main.layoutManager.bottomIndex; +- + if (this._isOnBottomMonitor) { + let actor = this.actor; + this._bottomHoverChangedId = +@@ -943,6 +997,12 @@ const WindowList = new Lang.Class({ + children[active].activate(); + }, + ++ _updateWorkspaceIndicatorVisibility: function() { ++ this._workspaceIndicator.actor.visible = ++ this._monitor == Main.layoutManager.primaryMonitor || ++ !this._workspaceSettings.get_boolean('workspaces-only-on-primary'); ++ }, ++ + _getPreferredUngroupedWindowListWidth: function() { + if (this._windowList.get_n_children() == 0) + return this._windowList.get_preferred_width(-1)[1]; +@@ -952,13 +1012,21 @@ const WindowList = new Lang.Class({ + let spacing = this._windowList.layout_manager.spacing; + + let workspace = global.screen.get_active_workspace(); +- let nWindows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace).length; ++ let windows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace); ++ if (this._perMonitor) { ++ windows = windows.filter(Lang.bind(this, function(window) { ++ return window.get_monitor() == this._monitor.index; ++ })); ++ } ++ let nWindows = windows.length; ++ if (nWindows == 0) ++ return this._windowList.get_preferred_width(-1)[1]; + + return nWindows * childWidth + (nWindows - 1) * spacing; + }, + + _getMaxWindowListWidth: function() { +- let indicatorsBox = this._trayButton.actor.get_parent(); ++ let indicatorsBox = this._workspaceIndicator.actor.get_parent(); + return this.actor.width - indicatorsBox.get_preferred_width(-1)[1]; + }, + +@@ -1046,7 +1114,7 @@ const WindowList = new Lang.Class({ + }, + + _addApp: function(app) { +- let button = new AppButton(app); ++ let button = new AppButton(app, this._perMonitor, this._monitor.index); + this._windowList.layout_manager.pack(button.actor, + true, true, true, + Clutter.BoxAlignment.START, +@@ -1079,7 +1147,7 @@ const WindowList = new Lang.Class({ + return; + } + +- let button = new WindowButton(win); ++ let button = new WindowButton(win, this._perMonitor, this._monitor.index); + this._windowList.layout_manager.pack(button.actor, + true, true, true, + Clutter.BoxAlignment.START, +@@ -1188,6 +1256,8 @@ const WindowList = new Lang.Class({ + }, + + _onDestroy: function() { ++ this._workspaceSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId); ++ + this._workspaceIndicator.destroy(); + + Main.ctrlAltTabManager.removeGroup(this.actor); +@@ -1195,9 +1265,6 @@ const WindowList = new Lang.Class({ + this._appSystem.disconnect(this._appStateChangedId); + this._appStateChangedId = 0; + +- Main.layoutManager.disconnect(this._monitorsChangedId); +- this._monitorsChangedId = 0; +- + Main.layoutManager.disconnect(this._keyboardVisiblechangedId); + this._keyboardVisiblechangedId = 0; + +@@ -1244,34 +1311,69 @@ const Extension = new Lang.Class({ + Name: 'Extension', + + _init: function() { +- this._windowList = null; ++ this._windowLists = null; + this._injections = {}; + }, + + enable: function() { +- this._windowList = new WindowList(); ++ this._windowLists = []; + + this._injections['_trayDwellTimeout'] = + MessageTray.MessageTray.prototype._trayDwellTimeout; + MessageTray.MessageTray.prototype._trayDwellTimeout = function() { + return false; + }; ++ ++ this._settings = Convenience.getSettings(); ++ this._showOnAllMonitorsChangedId = ++ this._settings.connect('changed::show-on-all-monitors', ++ Lang.bind(this, this._buildWindowLists)); ++ ++ this._monitorsChangedId = ++ Main.layoutManager.connect('monitors-changed', ++ Lang.bind(this, this._buildWindowLists)); ++ ++ this._buildWindowLists(); ++ }, ++ ++ _buildWindowLists: function() { ++ this._windowLists.forEach(function(windowList) { ++ windowList.actor.destroy(); ++ }); ++ this._windowLists = []; ++ ++ let showOnAllMonitors = this._settings.get_boolean('show-on-all-monitors'); ++ ++ Main.layoutManager.monitors.forEach(Lang.bind(this, function(monitor) { ++ if (showOnAllMonitors || monitor == Main.layoutManager.primaryMonitor) ++ this._windowLists.push(new WindowList(showOnAllMonitors, monitor)); ++ })); + }, + + disable: function() { +- if (!this._windowList) ++ if (!this._windowLists) + return; + +- this._windowList.actor.hide(); +- this._windowList.actor.destroy(); +- this._windowList = null; ++ this._settings.disconnect(this._showOnAllMonitorsChangedId); ++ this._showOnAllMonitorsChangedId = 0; ++ ++ Main.layoutManager.disconnect(this._monitorsChangedId); ++ this._monitorsChangedId = 0; ++ ++ this._windowLists.forEach(function(windowList) { ++ windowList.actor.hide(); ++ windowList.actor.destroy(); ++ }); ++ this._windowLists = null; + + for (let prop in this._injections) + MessageTray.MessageTray.prototype[prop] = this._injections[prop]; + }, + +- windowListContains: function(actor) { +- return this._windowList.actor.contains(actor); ++ someWindowListContains: function(actor) { ++ return this._windowLists.some(function(windowList) { ++ return windowList.actor.contains(actor); ++ }); + } + }); + +diff --git a/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in b/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in +index d5bbdf4..f736e36 100644 +--- a/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in ++++ b/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in +@@ -15,5 +15,13 @@ + window list. Possible values are "never", "auto" and "always". + + ++ ++ false ++ <_summary>Show the window list on all monitors ++ <_description> ++ Whether to show the window list on all connected monitors or ++ only on the primary one. ++ ++ + + +diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js +index 3db09c3..dc20065 100644 +--- a/extensions/window-list/prefs.js ++++ b/extensions/window-list/prefs.js +@@ -1,5 +1,6 @@ + // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- + ++const Gio = imports.gi.Gio; + const GObject = imports.gi.GObject; + const Gtk = imports.gi.Gtk; + const Lang = imports.lang; +@@ -19,25 +20,25 @@ function init() { + const WindowListPrefsWidget = new GObject.Class({ + Name: 'WindowList.Prefs.Widget', + GTypeName: 'WindowListPrefsWidget', +- Extends: Gtk.Frame, ++ Extends: Gtk.Grid, + + _init: function(params) { + this.parent(params); + +- this.shadow_type = Gtk.ShadowType.NONE; + this.margin = 24; ++ this.row_spacing = 6; ++ this.orientation = Gtk.Orientation.VERTICAL; + +- let title = '' + _("Window Grouping") + ''; +- let titleLabel = new Gtk.Label({ use_markup: true, label: title }); +- this.set_label_widget(titleLabel); ++ let groupingLabel = '' + _("Window Grouping") + ''; ++ this.add(new Gtk.Label({ label: groupingLabel, use_markup: true, ++ halign: Gtk.Align.START })); + + let align = new Gtk.Alignment({ left_padding: 12 }); + this.add(align); + + let grid = new Gtk.Grid({ orientation: Gtk.Orientation.VERTICAL, + row_spacing: 6, +- column_spacing: 6, +- margin_top: 6 }); ++ column_spacing: 6 }); + align.add(grid); + + this._settings = Convenience.getSettings(); +@@ -70,6 +71,11 @@ const WindowListPrefsWidget = new GObject.Class({ + this._settings.set_string('grouping-mode', mode); + })); + } ++ ++ let check = new Gtk.CheckButton({ label: _("Show on all monitors"), ++ margin_top: 6 }); ++ this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT); ++ this.add(check); + } + }); + +-- +2.5.0 + + +From 85dc86579e17f290a2ceaea2b00db54094d96543 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 19 Dec 2014 14:58:52 +0100 +Subject: [PATCH 5/5] window-list: Do not hardcode overrides schema + +Classic mode uses a different overrides schema, so make sure we use the +correct setting instead of hardcoding the usual org.gnome.shell.overrides +schema. + +https://bugzilla.gnome.org/show_bug.cgi?id=737486 +--- + extensions/window-list/extension.js | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 4f92c3c..64f3c72 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -860,7 +860,7 @@ const WindowList = new Lang.Class({ + this._workspaceIndicator = new WorkspaceIndicator(); + indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true }); + +- this._workspaceSettings = new Gio.Settings({ schema_id: 'org.gnome.shell.overrides' }); ++ this._workspaceSettings = this._getWorkspaceSettings(); + this._workspacesOnlyOnPrimaryChangedId = + this._workspaceSettings.connect('changed::workspaces-only-on-primary', + Lang.bind(this, this._updateWorkspaceIndicatorVisibility)); +@@ -972,6 +972,13 @@ const WindowList = new Lang.Class({ + this._groupingModeChanged(); + }, + ++ _getWorkspaceSettings: function() { ++ let settings = global.get_overrides_settings(); ++ if (settings.list_keys().indexOf('workspaces-only-on-primary') > -1) ++ return settings; ++ return new Gio.Settings({ schema_id: 'org.gnome.mutter' }); ++ }, ++ + _onScrollEvent: function(actor, event) { + let direction = event.get_scroll_direction(); + let diff = 0; +-- +2.5.0 + diff --git a/SOURCES/scale-window-list-with-text.patch b/SOURCES/scale-window-list-with-text.patch new file mode 100644 index 0000000..d9eb84b --- /dev/null +++ b/SOURCES/scale-window-list-with-text.patch @@ -0,0 +1,165 @@ +From 2a30c690fc53987a623141c8ba6b86c82fc1be0c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 12 Jun 2015 20:23:00 +0200 +Subject: [PATCH 1/4] window-list: Expand window buttons vertically + +The window-list's fixed height currently allows us to get away without +expanding buttons, however this won't be the case anymore once we start +adapting the list with the text scaling. So fix up the code to do what +was always the intention anyway. + +https://bugzilla.gnome.org/show_bug.cgi?id=703585 +--- + extensions/window-list/extension.js | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index b22f8bf..5ceccc1 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -140,11 +140,12 @@ const WindowTitle = new Lang.Class({ + + _init: function(metaWindow) { + this._metaWindow = metaWindow; +- this.actor = new St.BoxLayout({ style_class: 'window-button-box' }); ++ this.actor = new St.BoxLayout({ style_class: 'window-button-box', ++ x_expand: true, y_expand: true }); + + this._icon = new St.Bin({ style_class: 'window-button-icon' }); + this.actor.add(this._icon); +- this._label = new St.Label(); ++ this._label = new St.Label({ y_align: Clutter.ActorAlign.CENTER }); + this.actor.add(this._label); + + this._textureCache = St.TextureCache.get_default(); +@@ -202,6 +203,7 @@ const WindowButton = new Lang.Class({ + this._windowTitle = new WindowTitle(this.metaWindow); + this.actor = new St.Button({ style_class: 'window-button', + x_fill: true, ++ y_fill: true, + can_focus: true, + button_mask: St.ButtonMask.ONE | + St.ButtonMask.THREE, +@@ -396,6 +398,7 @@ const AppButton = new Lang.Class({ + Lang.bind(this, this._updateIconGeometry)); + + this._singleWindowTitle = new St.Bin({ x_expand: true, ++ y_fill: true, + x_align: St.Align.START }); + stack.add_actor(this._singleWindowTitle); + +@@ -406,7 +409,8 @@ const AppButton = new Lang.Class({ + this._icon = new St.Bin({ style_class: 'window-button-icon', + child: app.create_icon_texture(ICON_TEXTURE_SIZE) }); + this._multiWindowTitle.add(this._icon); +- this._multiWindowTitle.add(new St.Label({ text: app.get_name() })); ++ this._multiWindowTitle.add(new St.Label({ text: app.get_name(), ++ y_align: Clutter.ActorAlign.CENTER })); + + this._menuManager = new PopupMenu.PopupMenuManager(this); + this._menu = new PopupMenu.PopupMenu(this.actor, 0.5, St.Side.BOTTOM); +-- +2.5.0 + + +From e03552c1a104f0a59e630810b056de4790e0f537 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 12 Jun 2015 18:26:17 +0200 +Subject: [PATCH 2/4] window-list: Reposition on height changes + +The window list position depends on both the monitor geometry and the +list height, however changes to the latter are currently ignored. For +the time being this doesn't matter due to the list's fixed height, but +we are about to scale the list with the text, so reposition the list +on height changes. + +https://bugzilla.gnome.org/show_bug.cgi?id=703585 +--- + extensions/window-list/extension.js | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 5ceccc1..9347813 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -818,6 +818,7 @@ const WindowList = new Lang.Class({ + this._monitorsChangedId = + Main.layoutManager.connect('monitors-changed', + Lang.bind(this, this._updatePosition)); ++ this.actor.connect('notify::height', Lang.bind(this, this._updatePosition)); + this._updatePosition(); + + this._keyboardVisiblechangedId = +-- +2.5.0 + + +From ec0950adeeb36402ee9f1e7998284cd21100d28a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 12 Jun 2015 19:18:28 +0200 +Subject: [PATCH 3/4] window-list: Use font-relative sizes for width/height + +Just like the top bar, the window list should scale according to +the font scaling factor, so convert the existing pixel sizes into +font-relative ones. + +https://bugzilla.gnome.org/show_bug.cgi?id=703585 +--- + extensions/window-list/stylesheet.css | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/extensions/window-list/stylesheet.css b/extensions/window-list/stylesheet.css +index 2b6be8d..f5285cb 100644 +--- a/extensions/window-list/stylesheet.css ++++ b/extensions/window-list/stylesheet.css +@@ -2,7 +2,7 @@ + /* .window-button-icon height + + .window-button vertical padding + + .window-button > StWidget vertical padding) */ +- height: 30px; ++ height: 2.25em; + } + + .window-list { +@@ -27,8 +27,8 @@ + } + + .window-button > StWidget { +- -st-natural-width: 250px; +- max-width: 250px; ++ -st-natural-width: 18.75em; ++ max-width: 18.75em; + color: #bbb; + background-color: black; + border-radius: 4px; +-- +2.5.0 + + +From d17c72c3b42e72e82303643d4a8ee35054bb6676 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 4 Sep 2015 19:56:23 +0200 +Subject: [PATCH 4/4] window-list: Use font-relative size in classic style + +Commit 85b7049376a3 fixed this for the regular session, but forgot to also +update the classic style. +--- + extensions/window-list/classic.css | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/extensions/window-list/classic.css b/extensions/window-list/classic.css +index fd84371..321c5fb 100644 +--- a/extensions/window-list/classic.css ++++ b/extensions/window-list/classic.css +@@ -3,7 +3,7 @@ + #panel.bottom-panel { + border-top-width: 1px; + border-bottom-width: 0px; +- height: 32px !important; ++ height: 2.25em !important; + } + + .bottom-panel .window-button > StWidget { +-- +2.5.0 + diff --git a/SOURCES/support-headless-mode.patch b/SOURCES/support-headless-mode.patch new file mode 100644 index 0000000..9f7d449 --- /dev/null +++ b/SOURCES/support-headless-mode.patch @@ -0,0 +1,25 @@ +From acee50af7dd6e8f4bea30314bc9dc5f8d212d2f6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 23 Jul 2015 16:00:55 +0200 +Subject: [PATCH] window-list: Handle the no-monitor case + +--- + extensions/window-list/extension.js | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js +index 9347813..28feda6 100644 +--- a/extensions/window-list/extension.js ++++ b/extensions/window-list/extension.js +@@ -979,6 +979,8 @@ const WindowList = new Lang.Class({ + + _updatePosition: function() { + let monitor = Main.layoutManager.primaryMonitor; ++ if (!monitor) ++ return; + this.actor.width = monitor.width; + this.actor.set_position(monitor.x, monitor.y + monitor.height - this.actor.height); + }, +-- +2.4.3 + diff --git a/SOURCES/translations.patch b/SOURCES/translations.patch deleted file mode 100644 index d0e6c9f..0000000 --- a/SOURCES/translations.patch +++ /dev/null @@ -1,6661 +0,0 @@ -diff -up gnome-shell-extensions-3.8.4/po/as.po.translations gnome-shell-extensions-3.8.4/po/as.po ---- gnome-shell-extensions-3.8.4/po/as.po.translations 2013-09-11 09:53:37.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/as.po 2013-12-12 00:35:58.465258675 -0500 -@@ -1,22 +1,22 @@ - # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER - # This file is distributed under the same license as the PACKAGE package. --# -+# - # Nilamdyuti Goswami , 2013. -+# ngoswami , 2013. #zanata - msgid "" - msgstr "" --"Project-Id-Version: \n" --"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" --"shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2013-07-29 07:39+0000\n" --"PO-Revision-Date: 2013-07-29 13:07+0530\n" --"Last-Translator: Nilamdyuti Goswami \n" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-09-20 09:26-0400\n" -+"Last-Translator: ngoswami \n" - "Language-Team: American English \n" --"Language: en_US\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: as\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" --"X-Generator: Lokalize 1.5\n" -+"X-Generator: Zanata 3.1.2\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -91,15 +91,15 @@ msgstr "স্থগিত কৰা স - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 - msgid "Control the visibility of the Suspend menu item" --msgstr "স্থগিত মেনু বস্তুৰ দৃশ্যমানতা নিয়ন্ত্ৰণ কৰক" -+msgstr "স্থগিত কৰক মেনু বস্তুৰ দৃশ্যমানতা নিয়ন্ত্ৰণ কৰে" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 - msgid "Enable hibernating" --msgstr "হাইবেৰনেইট কৰা সামৰ্থবান কৰক" -+msgstr "হাইবাৰনেইটিং সামৰ্থবান কৰক" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 - msgid "Control the visibility of the Hibernate menu item" --msgstr "হাইবেৰনেইট মেনু বস্তুৰ দৃশ্যমানতা নিয়ন্ত্ৰণ কৰক" -+msgstr "হাইবেৰনেইট মেনু বস্তুৰ দৃশ্যমানতা নিয়ন্ত্ৰণ কৰে" - - #: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" -@@ -122,8 +122,8 @@ msgid "" - "A list of strings, each containing an application id (desktop file name), " - "followed by a colon and the workspace number" - msgstr "" --"স্ট্ৰিংসমূহৰ এটা তালিকা, প্ৰতিটোয়ে এটা এপ্লিকেচন আইডি (ডেস্কটপ ফাইল নাম), এটা কল'ন " --"আৰু কাৰ্য্যস্থান নম্বৰৰ সৈতে অনুকৰণ কৰা অন্তৰ্ভুক্ত কৰে" -+"স্ট্ৰিংসমূহৰ এটা তালিকা, প্ৰতিটোয়ে এটা এপ্লিকেচন আইডি (ডেস্কটপ ফাইল নাম), " -+"এটা কল'ন আৰু কাৰ্য্যস্থান নম্বৰৰ সৈতে অনুকৰণ কৰা অন্তৰ্ভুক্ত কৰে" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" -@@ -199,9 +199,10 @@ msgid "" - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." - msgstr "" --"পৰ্দা অনুপাত হাৰৰ সৈতে অনুকূলন কৰি উইন্ডো থাম্বনেইলসমূহ উপস্থাপন কৰাৰ বাবে অধিক পৰ্দা " --"ব্যৱহাৰ কৰাৰ, আৰু বান্ধনী বাকচ হ্ৰাস কৰিবলে সিহতক ততোধিক শৃঙ্খলাবদ্ধ কৰাৰ চেষ্টা " --"কৰক। এই সংহতি কেৱল স্বাভাৱিক উপস্থাপন কৌশলৰ সৈতে প্ৰযোজ্য।" -+"পৰ্দা অনুপাত হাৰৰ সৈতে অনুকূলন কৰি উইন্ডো থাম্বনেইলসমূহ উপস্থাপন কৰাৰ বাবে " -+"অধিক পৰ্দা ব্যৱহাৰ কৰাৰ, আৰু বান্ধনী বাকচ হ্ৰাস কৰিবলে সিহতক ততোধিক " -+"শৃঙ্খলাবদ্ধ কৰাৰ চেষ্টা কৰক। এই সংহতি কেৱল স্বাভাৱিক উপস্থাপন কৌশলৰ সৈতে " -+"প্ৰযোজ্য।" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" -@@ -214,8 +215,8 @@ msgid "" - "restarting the shell to have any effect." - msgstr "" - "যদি সত্য, উইন্ডো কেপষণ প্ৰতিটো থাম্বনেইলৰ ওপৰত ৰাখক, ইয়াক তলত ৰখাৰ শ্বেলৰ " --"অবিকল্পিত প্ৰক্ৰিয়াক অভাৰৰাইড কৰাকৈ। এই সংহতিৰ পৰিবৰ্তন প্ৰভাৱশালী হ'বলৈ শ্বেল " --"পুনৰাম্ভ কৰাৰ প্ৰয়োজন।" -+"অবিকল্পিত প্ৰক্ৰিয়াক অভাৰৰাইড কৰাকৈ। এই সংহতিৰ পৰিবৰ্তন প্ৰভাৱশালী হ'বলৈ " -+"শ্বেল পুনৰাম্ভ কৰাৰ প্ৰয়োজন।" - - #: ../extensions/places-menu/extension.js:77 - msgid "Places" -@@ -264,8 +265,9 @@ msgid "" - "Decides when to group windows from the same application on the window list. " - "Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"উইন্ডো তালিকাত একেটা এপ্লিকেচনৰ পৰা উইন্ডোসমূহ কেতিয়া দলবদ্ধ কৰা হ'ব নিৰ্ধাৰণ কৰে। " --"সম্ভাব্য মানসমূহ হ'ল \"কেতিয়াও নহয়\", \"স্বচালিত\" আৰু \"সদায়\"।" -+"উইন্ডো তালিকাত একেটা এপ্লিকেচনৰ পৰা উইন্ডোসমূহ কেতিয়া দলবদ্ধ কৰা হ'ব " -+"নিৰ্ধাৰণ কৰে। সম্ভাব্য মানসমূহ হ'ল \"কেতিয়াও নহয়\", \"স্বচালিত\" আৰু " -+"\"সদায়\"।" - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -306,20 +308,20 @@ msgstr "স্বাভাৱিক" - - #: ../extensions/xrandr-indicator/extension.js:31 - msgid "Left" --msgstr "বাঁওফাল" -+msgstr "বাওঁ" - - #: ../extensions/xrandr-indicator/extension.js:32 - msgid "Right" --msgstr "সোঁফাল" -+msgstr "সোঁ" - - #: ../extensions/xrandr-indicator/extension.js:33 - msgid "Upside-down" --msgstr "উলোটা" -+msgstr "ওপৰ-তলফালে" - - #: ../extensions/xrandr-indicator/extension.js:50 - msgid "Display" --msgstr "প্ৰদৰ্শন" -+msgstr "প্ৰদৰ্শন কৰক" - - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" --msgstr "প্ৰদৰ্শনৰ সংহতিসমূহ" -+msgstr "প্ৰদৰ্শন সংহতিসমূহ" -diff -up gnome-shell-extensions-3.8.4/po/bn_IN.po.translations gnome-shell-extensions-3.8.4/po/bn_IN.po ---- gnome-shell-extensions-3.8.4/po/bn_IN.po.translations 2013-12-12 00:35:58.465258675 -0500 -+++ gnome-shell-extensions-3.8.4/po/bn_IN.po 2013-12-12 00:35:58.465258675 -0500 -@@ -0,0 +1,338 @@ -+# sray , 2013. #zanata -+msgid "" -+msgstr "" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-09-26 05:02-0400\n" -+"Last-Translator: sray \n" -+"Language-Team: Bengali (India)\n" -+"MIME-Version: 1.0\n" -+"Content-Type: text/plain; charset=UTF-8\n" -+"Content-Transfer-Encoding: 8bit\n" -+"Language: bn-IN\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n != 1)\n" -+ -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "GNOME ক্লাসিক" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "এই সেশন অাপনাকে GNOME ক্লাসিকে লগ করায়" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "GNOME সেল ক্লাসিক" -+ -+# auto translated by TM merge from project: gnome-shell, version: 3.8.4, DocId: gnome-shell -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "উইন্ডো পরিচালনা ও অ্যাপ্লিকেশন প্রারম্ভ" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "প্রধান উইন্ডোতে মোডেল ডায়ালগ সংযুক্ত করুন" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "" -+"GNOME সেল চালানোর ক্ষেত্রে এই কী in org.gnome.mutter এর কী ওভাররাইড করে।" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "উইন্ডো স্ক্রীন কিনারায় রাখার সময়ে কিনারা টাইলিং সক্রিয় করুন" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "শুধুমাত্র প্রধান মনিটরে ওয়ার্কস্পেস" -+ -+#: ../extensions/alternate-tab/prefs.js:20 -+msgid "Thumbnail only" -+msgstr "শুধুমাত্র থাম্বনেইল" -+ -+#: ../extensions/alternate-tab/prefs.js:21 -+msgid "Application icon only" -+msgstr "শুধুমাত্র অ্যাপ্লিকেশন অাইকন" -+ -+#: ../extensions/alternate-tab/prefs.js:22 -+msgid "Thumbnail and application icon" -+msgstr "থাম্বনেইল এবং অ্যাপ্লিকেশন অাইকন" -+ -+#: ../extensions/alternate-tab/prefs.js:37 -+msgid "Present windows as" -+msgstr "এই রূপে উইন্ডো উপস্থাপনা" -+ -+#: ../extensions/alternate-tab/prefs.js:62 -+msgid "Show only windows in the current workspace" -+msgstr "শুধুমাত্র উইন্ডো বর্তমান ওয়ার্কস্পেসে দেখান" -+ -+# auto translated by TM merge from project: gdm, version: 3.8.4, DocId: gdm -+#. add the new entries -+#: ../extensions/alternative-status-menu/extension.js:125 -+msgid "Suspend" -+msgstr "স্থগিত করুন" -+ -+#: ../extensions/alternative-status-menu/extension.js:128 -+msgid "Hibernate" -+msgstr "নিদ্রিত অবস্থা" -+ -+# auto translated by TM merge from project: gnome-shell, version: 3.8.4, DocId: gnome-shell -+#: ../extensions/alternative-status-menu/extension.js:131 -+msgid "Power Off" -+msgstr "বন্ধ করুন" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 -+msgid "Enable suspending" -+msgstr "স্থগিত সক্রিয় করুন" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 -+msgid "Control the visibility of the Suspend menu item" -+msgstr "স্থগিত মেনু অাইটেমের দৃশ্যমানতা নিয়ন্ত্রণ করুন" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 -+msgid "Enable hibernating" -+msgstr "নিদ্রিত অবস্থা সক্রিয় করুন" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 -+msgid "Control the visibility of the Hibernate menu item" -+msgstr "নিদ্রিত অবস্থা মেনু অাইটেমের দৃশ্যমানতা নিয়ন্ত্রণ করুন" -+ -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "ক্রিয়াকলাপের পূর্বরূপ" -+ -+# auto translated by TM merge from project: system-config-printer, version: 1.1.16-23, DocId: system-config-printer -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "বিশেষ" -+ -+# auto translated by TM merge from project: gnome-menus, version: 3.8.0, DocId: gnome-menus-3.0 -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "অ্যাপ্লিকেশন" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 -+msgid "Application and workspace list" -+msgstr "অ্যাপ্লেকেশন এবং ওয়ার্কস্পেস তালিকা" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 -+msgid "" -+"A list of strings, each containing an application id (desktop file name), " -+"followed by a colon and the workspace number" -+msgstr "" -+"স্ট্রীঙের একটি তালিকা, প্রতিটিতে থাকে একটি অ্যাপ্লিকেশন অাইডি (ডেস্কটপ ফাইল " -+"নাম), সংগে থাকে যতিচিহ্ন এবং ওয়ার্কস্পেস নম্বর" -+ -+# auto translated by TM merge from project: yelp, version: 3.8.1, DocId: yelp -+#: ../extensions/auto-move-windows/prefs.js:55 -+msgid "Application" -+msgstr "অ্যাপ্লিকেশন" -+ -+#: ../extensions/auto-move-windows/prefs.js:64 -+#: ../extensions/auto-move-windows/prefs.js:106 -+msgid "Workspace" -+msgstr "ওয়ার্কস্পেস" -+ -+# auto translated by TM merge from project: evolution, version: el6, DocId: evolution-2.32 -+#: ../extensions/auto-move-windows/prefs.js:80 -+msgid "Add rule" -+msgstr "নিয়ম যোগ করুন" -+ -+#: ../extensions/auto-move-windows/prefs.js:94 -+msgid "Create new matching rule" -+msgstr "মেলানোর নতুন নিয়ম তৈরি করুন" -+ -+# auto translated by TM merge from project: file-roller, version: 3.8.3, DocId: file-roller -+#: ../extensions/auto-move-windows/prefs.js:98 -+msgid "Add" -+msgstr "যোগ করুন" -+ -+#: ../extensions/drive-menu/extension.js:72 -+#, c-format -+msgid "Ejecting drive '%s' failed:" -+msgstr "'%s' ড্রাইভ ইজেক্ট করা গেল না:" -+ -+#: ../extensions/drive-menu/extension.js:89 -+msgid "Removable devices" -+msgstr "অপসারণযোগ্য ডিভাইসগুলি" -+ -+# auto translated by TM merge from project: gnome-user-share, version: 3.8, DocId: gnome-user-share -+#: ../extensions/drive-menu/extension.js:106 -+msgid "Open File" -+msgstr "ফাইল খুলুন" -+ -+#: ../extensions/example/extension.js:17 -+msgid "Hello, world!" -+msgstr "ওহে, বিশ্ব!" -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 -+msgid "Alternative greeting text." -+msgstr "বিকল্প অভিবাদন পাঠ্য।" -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 -+msgid "" -+"If not empty, it contains the text that will be shown when clicking on the " -+"panel." -+msgstr "খালি না থাকলে, তাতে পাঠ্য থাকবে যা প্যানেলে ক্লিক করা হলে দেখানো হবে।" -+ -+#. TRANSLATORS: Example is the name of the extension, should not be -+#. translated -+#: ../extensions/example/prefs.js:30 -+msgid "" -+"Example aims to show how to build well behaved extensions for the Shell and " -+"as such it has little functionality on its own.\n" -+"Nevertheless it's possible to customize the greeting message." -+msgstr "" -+"সেলের জন্য সুস্থিত এক্সটেনশন কীভাবে গঠন করা সম্ভব তা উদাহরণের মাধ্যমে " -+"উপস্থাপিত করা হয়।\n" -+"উপরন্তু অভিভাদন বার্তা নিজের পছন্দ মতোও করে নেওয়া যায়।" -+ -+#: ../extensions/example/prefs.js:36 -+msgid "Message:" -+msgstr "বার্তা:" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 -+msgid "Use more screen for windows" -+msgstr "উইন্ডোর জন্য অারো স্ক্রীন ব্যবহার করুন" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 -+msgid "" -+"Try to use more screen for placing window thumbnails by adapting to screen " -+"aspect ratio, and consolidating them further to reduce the bounding box. " -+"This setting applies only with the natural placement strategy." -+msgstr "" -+"স্ক্রীন অ্যাসপেক্ট অনুপাত সামঞ্জস্যপূর্ণ করে উইন্ডো থাম্বনেইল রাখার জন্য " -+"অারো স্ক্রীন ব্যবহারের চেষ্টা করুন, এবং বাউন্ডিং বক্স কমাতে তাদের সংঘবদ্ধ " -+"করার চেষ্টা করুন। এই সেটিং শুধুমাত্র স্বাভাবিক প্লেসমেন্ট কৌশলের ক্ষেত্রেই " -+"প্রযোজ্য হয়।" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 -+msgid "Place window captions on top" -+msgstr "উইন্ডো ক্যাপশন একেবারে শীর্ষে রাখুন" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 -+msgid "" -+"If true, place window captions on top the respective thumbnail, overriding " -+"shell default of placing it at the bottom. Changing this setting requires " -+"restarting the shell to have any effect." -+msgstr "" -+"যদি সত্য হয়, তলায় রাখার সেল ডিফল্ট ওভাররাইড করে সংশ্লিষ্ট থাম্বনেইলের শীর্ষে " -+"উইন্ডো ক্যাপশন রাখুন। এই সেটিং পরিবর্তন করলে তা প্রয়োগ করতে সেল বন্ধ করে " -+"চালু করতে হবে।" -+ -+# auto translated by TM merge from project: file-roller, version: 3.8.3, DocId: file-roller -+#: ../extensions/places-menu/extension.js:77 -+msgid "Places" -+msgstr "অবস্থান" -+ -+#: ../extensions/places-menu/placeDisplay.js:56 -+#, c-format -+msgid "Failed to launch \"%s\"" -+msgstr "\"%s\" লঞ্চ করা গেল না" -+ -+# auto translated by TM merge from project: gvfs, version: 1.16.3, DocId: gvfs -+#: ../extensions/places-menu/placeDisplay.js:98 -+#: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "কম্পিউটার" -+ -+# auto translated by TM merge from project: rhsm-web, version: 0.0, DocId: management -+#: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "প্রথম পাতা" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "নেটওয়ার্ক ব্রাউজ" -+ -+# auto translated by TM merge from project: gnome-system-monitor, version: 3.8.2.1, DocId: gnome-system-monitor -+#: ../extensions/systemMonitor/extension.js:213 -+msgid "CPU" -+msgstr "CPU" -+ -+# auto translated by TM merge from project: RHEV Installation Guide, version: 3.1, DocId: topics/Planning_your_Data_Center -+#: ../extensions/systemMonitor/extension.js:266 -+msgid "Memory" -+msgstr "মেমরি" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 -+msgid "Theme name" -+msgstr "থিম নাম" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 -+msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -+msgstr "থিমের নাম, ~/.themes/name/gnome-shell থেকে লোড করা হবে" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "উইন্ডো দলভুক্তকরণ" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"উইন্ডো তালিকায় একই অ্যাপ্লিকেশন থেকে কখন উইন্ডো দলভুক্ত করা হবে তার " -+"সিদ্ধান্ত নেয়। সম্ভাব্য মানগুলি হল \"কখনও নয়\", \"স্বয়ংক্রিয়\" এবং " -+"\"সর্বদা\"।" -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "উইন্ডো দলভুক্তকরণ" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "উইন্ডো কখনও দলভুক্ত করবেন না" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "স্থান কম থাকলে উইন্ডো দলভুক্ত করুন" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "উইন্ডো সর্বদা দলভুক্ত করুন" -+ -+#: ../extensions/workspace-indicator/extension.js:30 -+msgid "Workspace Indicator" -+msgstr "ওয়ার্কস্পেস সূচক" -+ -+#: ../extensions/workspace-indicator/prefs.js:141 -+msgid "Workspace names:" -+msgstr "ওয়ার্কস্পেস নামগুলি:" -+ -+#: ../extensions/workspace-indicator/prefs.js:152 -+msgid "Name" -+msgstr "নাম" -+ -+#: ../extensions/workspace-indicator/prefs.js:186 -+#, c-format -+msgid "Workspace %d" -+msgstr "ওয়ার্কস্পেস %d" -+ -+#: ../extensions/xrandr-indicator/extension.js:30 -+msgid "Normal" -+msgstr "স্বাভাবিক" -+ -+#: ../extensions/xrandr-indicator/extension.js:31 -+msgid "Left" -+msgstr "বাম" -+ -+#: ../extensions/xrandr-indicator/extension.js:32 -+msgid "Right" -+msgstr "ডান" -+ -+#: ../extensions/xrandr-indicator/extension.js:33 -+msgid "Upside-down" -+msgstr "উল্টো" -+ -+#: ../extensions/xrandr-indicator/extension.js:50 -+msgid "Display" -+msgstr "প্রদর্শন" -+ -+#: ../extensions/xrandr-indicator/extension.js:80 -+msgid "Display Settings" -+msgstr "প্রদর্শন সেটিং" -diff -up gnome-shell-extensions-3.8.4/po/de.po.translations gnome-shell-extensions-3.8.4/po/de.po ---- gnome-shell-extensions-3.8.4/po/de.po.translations 2013-09-11 09:53:37.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/de.po 2013-12-12 00:35:58.465258675 -0500 -@@ -3,22 +3,24 @@ - # This file is distributed under the same license as the gnome-shell-extensions package. - # Mario Blättermann , 2011-2013. - # Christian Kirbach , 2011, 2012. --# -+# rgromans , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions master\n" - "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" - "shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2013-06-30 11:59+0000\n" --"PO-Revision-Date: 2013-07-11 19:25+0100\n" --"Last-Translator: Christian Kirbach \n" -+"POT-Creation-Date: 2013-03-11 01:25+0000\n" -+"PO-Revision-Date: 2013-10-21 09:09-0400\n" -+"Last-Translator: rgromans \n" - "Language-Team: Deutsch \n" --"Language: de_DE\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: de\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" --"X-Generator: Poedit 1.5.4\n" -+"X-Generator: Zanata 3.1.2\n" -+"X-Poedit-Country: GERMANY\n" -+"X-Poedit-Language: German\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -39,20 +41,19 @@ msgstr "Fensterverwaltung und Anwendungs - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 - msgid "Attach modal dialog to the parent window" --msgstr "Modalen Dialog an das übergeordnete Fenster anhängen" -+msgstr "Modalen Dialog an übergeordnetes Fenster binden" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" - "This key overrides the key in org.gnome.mutter when running GNOME Shell." - msgstr "" --"Dieser Schlüssel überschreibt den Schlüssel in org.gnome.mutter wenn GNOME " --"Shell läuft." -+"Dieser Schlüssel überschreibt den Schlüssel in org.gnome.mutter, wenn die " -+"GNOME-Shell läuft." - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 - msgid "Enable edge tiling when dropping windows on screen edges" - msgstr "" --"Größenanpassung aktivieren, wenn ein Fenster an die Bildschirmkante " --"verschoben wird" -+"Kantenplatzierung beim Berühren der Bildschirmränder mit Fenstern aktivieren" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 - msgid "Workspaces only on primary monitor" -@@ -210,9 +211,8 @@ msgid "" - msgstr "" - "Versuchen, mehr Bildschirmfläche zum Platzieren der Fenstervorschaubilder zu " - "verwenden, indem das Bildschirmseitenverhältnis berücksichtigt wird und " --"diese stärker zusammengelegt werden, um den umgebenden Rahmen zu " --"verkleinern. Diese Einstellung betrifft nur den natürlichen " --"Platzierungsalgorithmus." -+"diese stärker zusammengelegt werden, um den umgebenden Rahmen zu verkleinern." -+" Diese Einstellung betrifft nur den natürlichen Platzierungsalgorithmus." - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" -@@ -277,9 +277,9 @@ msgid "" - "Decides when to group windows from the same application on the window list. " - "Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"Legt fest, ob Fenster der selben Anwendung in der Fensterliste gruppiert " --"werden sollen. Mögliche Werte sind »never« (nie), »auto« (automatisch) und " --"»always« (immer)." -+"Entscheidet, wann die Fenster derselben Anwendung auf der Fenster Liste " -+"zusammengefasst werden sollen. Mögliche Werte sind \"never\", \"auto\" und " -+"\"always\"." - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -291,7 +291,7 @@ msgstr "Fenster niemals gruppieren" - - #: ../extensions/window-list/prefs.js:50 - msgid "Group windows when space is limited" --msgstr "Fenster bei begrenztem Platz gruppieren" -+msgstr "Fenster gruppieren wenn der Platz begrenzt ist" - - #: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" -@@ -337,39 +337,3 @@ msgstr "Anzeige" - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" - msgstr "Bildschirmeinstellungen" -- --#~ msgid "The application icon mode." --#~ msgstr "Der Modus des Anwendungssymbols." -- --#~ msgid "" --#~ "Configures how the windows are shown in the switcher. Valid possibilities " --#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" --#~ "only' (shows only the application icon) or 'both'." --#~ msgstr "" --#~ "Legt fest, wie die Fenster im Fensterumschalter angezeigt werden. Gültige " --#~ "Werte sind »thumbnail-only« (zeigt ein Vorschaubild des Fensters), »app-" --#~ "icon-only« (zeigt das Anwendungssymbol) oder »both« (beides)." -- --#~ msgid "Devices" --#~ msgstr "Geräte" -- --#~ msgid "Bookmarks" --#~ msgstr "Lesezeichen" -- --#~ msgid "Network" --#~ msgstr "Netzwerk" -- --#~ msgid "File System" --#~ msgstr "Dateisystem" -- --#~ msgid "Drag here to add favorites" --#~ msgstr "Hierher ziehen, um zu Favoriten hinzuzufügen" -- --#~ msgid "New Window" --#~ msgstr "Neues Fenster" -- --#~ msgid "Quit Application" --#~ msgstr "Anwendung beenden" -- --#~ msgid "Remove from Favorites" --#~ msgstr "Aus Favoriten entfernen" -diff -up gnome-shell-extensions-3.8.4/po/es.po.translations gnome-shell-extensions-3.8.4/po/es.po ---- gnome-shell-extensions-3.8.4/po/es.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/es.po 2013-12-12 00:52:47.976880553 -0500 -@@ -25,52 +25,52 @@ msgstr "" - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 - msgid "GNOME Classic" --msgstr "GNOME clásico" -+msgstr "GNOME Classic" - - #: ../data/gnome-classic.desktop.in.h:2 - msgid "This session logs you into GNOME Classic" --msgstr "Esta sesión inicia GNOME clásico" -+msgstr "Esta sesión lo registra en GNOME Classic" - - #: ../data/gnome-shell-classic.desktop.in.in.h:1 - msgid "GNOME Shell Classic" --msgstr "GNOME Shell clásico" -+msgstr "GNOME Shell Classic" - - #: ../data/gnome-shell-classic.desktop.in.in.h:2 - msgid "Window management and application launching" --msgstr "Gestión de ventanas e inicio de aplicaciones" -+msgstr "Administración de ventanas e inicio de aplicaciones" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 - msgid "Attach modal dialog to the parent window" --msgstr "Acoplar un diálogo modal a la ventana padre" -+msgstr "Anexar un diálogo modal a la ventana padre" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" - "This key overrides the key in org.gnome.mutter when running GNOME Shell." - msgstr "" --"Esta clave sobreescribe la clave en org.gnome.mutter al ejecutar GNOME Shell." -+"Esta clave sobrescribe la clave en org.gnome.mutter al ejecutar GNOME Shell." - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 - msgid "Enable edge tiling when dropping windows on screen edges" - msgstr "" - "Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la " --"ventana" -+"pantalla" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 - #| msgid "Workspace Indicator" - msgid "Workspaces only on primary monitor" --msgstr "Áreas de trabajo solo en la pantalla principal" -+msgstr "Áreas de trabajo solo en la pantalla principal" - - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" --msgstr "Sólo miniaturas" -+msgstr "Miniatura únicamente" - - #: ../extensions/alternate-tab/prefs.js:21 - msgid "Application icon only" --msgstr "Sólo icono de la aplicación" -+msgstr "Icono de la aplicaciones únicamente" - - #: ../extensions/alternate-tab/prefs.js:22 - msgid "Thumbnail and application icon" --msgstr "Miniatura e icono de la aplicación" -+msgstr "Miniatura e icono de aplicaciones" - - #: ../extensions/alternate-tab/prefs.js:37 - msgid "Present windows as" -@@ -78,7 +78,7 @@ msgstr "Presentar ventanas como" - - #: ../extensions/alternate-tab/prefs.js:62 - msgid "Show only windows in the current workspace" --msgstr "Mostrar ventanas solamente en el área de trabajo actual" -+msgstr "Mostrar la ventana sólo en el área de trabajo actual" - - #. add the new entries - #: ../extensions/alternative-status-menu/extension.js:125 -@@ -91,23 +91,23 @@ msgstr "Hibernar" - - #: ../extensions/alternative-status-menu/extension.js:131 - msgid "Power Off" --msgstr "Apagar" -+msgstr "Forzar apagado" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 - msgid "Enable suspending" --msgstr "Activar la suspensión" -+msgstr "Activar suspensión" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 - msgid "Control the visibility of the Suspend menu item" --msgstr "Controla la visibilidad del elemento de menú «Suspender»" -+msgstr "Controlara la visibilidad del elemento del menú de 'Suspender'" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 - msgid "Enable hibernating" --msgstr "Activar la hibernación" -+msgstr "Activar hibernación" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 - msgid "Control the visibility of the Hibernate menu item" --msgstr "Controla la visibilidad del elemento de menú «Hibernar»" -+msgstr "Controlar la visibilidad del elemento del menú de hibernación" - - #: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" -@@ -123,24 +123,25 @@ msgstr "Aplicaciones" - - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 - msgid "Application and workspace list" --msgstr "Lista de aplicaciones y áreas de trabajo" -+msgstr "Lista de aplicaciones y área de trabajo" - - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 - msgid "" - "A list of strings, each containing an application id (desktop file name), " - "followed by a colon and the workspace number" - msgstr "" --"Una lista de cadenas, conteniendo cada una un ID de aplicación (nombre de " --"archivo de escritorio), seguido de dos puntos y el número del área de trabajo" -+"Una lista de cadenas, cada una contiene un ID de aplicaciones (nombre de " -+"archivo de escritorio), seguido de dos puntos y el número de área de trabajo." -+"" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" --msgstr "Aplicación" -+msgstr "Aplicación" - - #: ../extensions/auto-move-windows/prefs.js:64 - #: ../extensions/auto-move-windows/prefs.js:106 - msgid "Workspace" --msgstr "Área de trabajo" -+msgstr "Área de trabajo" - - #: ../extensions/auto-move-windows/prefs.js:80 - msgid "Add rule" -@@ -148,7 +149,7 @@ msgstr "Añadir regla" - - #: ../extensions/auto-move-windows/prefs.js:94 - msgid "Create new matching rule" --msgstr "Crear regla de coincidencia nueva" -+msgstr "Crear una nueva regla coincidente" - - #: ../extensions/auto-move-windows/prefs.js:98 - msgid "Add" -@@ -157,11 +158,11 @@ msgstr "Añadir" - #: ../extensions/drive-menu/extension.js:72 - #, c-format - msgid "Ejecting drive '%s' failed:" --msgstr "Falló al expulsar el dispositivo «%s»" -+msgstr "La ejecución del controlador '%s' falló:" - - #: ../extensions/drive-menu/extension.js:89 - msgid "Removable devices" --msgstr "Dispositivos extraíbles" -+msgstr "Dispositivos extraíbles " - - #: ../extensions/drive-menu/extension.js:106 - msgid "Open File" -@@ -173,14 +174,14 @@ msgstr "¡Hola, mundo!" - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 - msgid "Alternative greeting text." --msgstr "Texto de bienvenida alternativo" -+msgstr "Texto de saludo alternativo." - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 - msgid "" - "If not empty, it contains the text that will be shown when clicking on the " - "panel." - msgstr "" --"Si no está vacío, contiene el texto que se desplegará al pulsar sobre el " -+"Si no está vacío, contiene el texto que se mostrará al hacer clic en el " - "panel." - - #. TRANSLATORS: Example is the name of the extension, should not be -@@ -191,10 +192,9 @@ msgid "" - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." - msgstr "" --"«Example» tiene por objeto mostrar cómo construir extensiones de buen " --"comportamiento para la Shell y por eso tiene poca funcionalidad por sí " --"solo.\n" --"Sin embargo, es posible personalizar el mensaje de bienvenida." -+"Ejemplo busca mostrar cómo construir extensiones para el shell y como tal " -+"tiene tiene poca funcionalidad por su cuenta. \n" -+"Sin embargo es posible personalizar el mensaje de saludo." - - #: ../extensions/example/prefs.js:36 - msgid "Message:" -@@ -202,7 +202,7 @@ msgstr "Mensaje:" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 - msgid "Use more screen for windows" --msgstr "Usar más pantalla para las ventanas" -+msgstr "Usar más de una pantalla para las ventanas" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 - msgid "" -@@ -210,13 +210,12 @@ msgid "" - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." - msgstr "" --"Intente utilizar más espacio para situar las miniaturas, adaptándolas a la " --"forma de la pantalla, y consolidarlas aún más para reducir el área ocupada. " --"Esta opción sólo se aplica a la estrategia de posicionamiento «natural»." -+"Intente usar más pantalla para colocar las miniaturas de ventanas al adaptar " -+"" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" --msgstr "Situar los títulos de ventanas arriba" -+msgstr "Colocar subtítulos de la ventana en la parte superior" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 - msgid "" -@@ -224,10 +223,9 @@ msgid "" - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." - msgstr "" --"Si es cierto, situar los títulos de las ventanas encima de las miniaturas " --"correspondientes, cambiando el comportamiento predeterminado de shell, que " --"los sitúa por debajo. Cambiar esta configuración requiere reiniciar la shell " --"para que tenga efecto." -+"Si es cierto, coloque los subtítulos en la parte superior de la miniatura, " -+"sobrescriba el shell que predetermina colocarlos en el fondo. Si cambia esta " -+"configuración, deberá reiniciar el shell para que se efectúe el cambio." - - #: ../extensions/places-menu/extension.js:77 - msgid "Places" -@@ -236,7 +234,7 @@ msgstr "Lugares" - #: ../extensions/places-menu/placeDisplay.js:56 - #, c-format - msgid "Failed to launch \"%s\"" --msgstr "Falló al lanzar «%s»" -+msgstr "Falló al lanzar «%s»" - - #: ../extensions/places-menu/placeDisplay.js:98 - #: ../extensions/places-menu/placeDisplay.js:121 -@@ -245,7 +243,7 @@ msgstr "Equipo" - - #: ../extensions/places-menu/placeDisplay.js:199 - msgid "Home" --msgstr "Carpeta personal" -+msgstr "Inicio" - - #: ../extensions/places-menu/placeDisplay.js:286 - msgid "Browse Network" -@@ -261,47 +259,48 @@ msgstr "Memoria" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 - msgid "Theme name" --msgstr "Nombre del tema" -+msgstr "Tema" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 - msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" --msgstr "El nombre del tema, que se carga desde ~/.themes/nombre/gnome-shell" -+msgstr "El nombre del tema, a ser cargado desde ~/.themes/name/gnome-shell" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 - msgid "When to group windows" --msgstr "Cuándo agrupar las ventanas" -+msgstr "Cuándo agrupar las ventanas" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 - msgid "" - "Decides when to group windows from the same application on the window list. " - "Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"Decide cuándo agrupar ventanas para la misma aplicación en la lista de " --"ventanas. Los valores posibles son «never», «auto» y «always»." -+"Decide cuándo agrupar las ventanas de la misma aplicación en la lista de " -+"windows. Los valores posibles son \"never\" (nunca), \"on_write\" (al " -+"escribir) y \"always\" (siempre). " - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" --msgstr "Agrupación de ventanas" -+msgstr "Agrupación de ventanas" - - #: ../extensions/window-list/prefs.js:49 - msgid "Never group windows" --msgstr "Nunca agrupar las ventanas" -+msgstr "Nunca agrupar ventanas" - - #: ../extensions/window-list/prefs.js:50 - msgid "Group windows when space is limited" --msgstr "Agrupar las ventanas cuando el espacio esté limitado" -+msgstr "Agrupar ventanas cuando el espacio sea limitado" - - #: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" --msgstr "Siempre agrupar las ventanas" -+msgstr "Siempre agrupar ventanas" - - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" --msgstr "Indicador de área de trabajo" -+msgstr "Indicador del área de trabajo" - - #: ../extensions/workspace-indicator/prefs.js:141 - msgid "Workspace names:" --msgstr "Nombres de los áreas de trabajo:" -+msgstr "Nombres de área de trabajo:" - - #: ../extensions/workspace-indicator/prefs.js:152 - msgid "Name" -@@ -310,7 +309,7 @@ msgstr "Nombre" - #: ../extensions/workspace-indicator/prefs.js:186 - #, c-format - msgid "Workspace %d" --msgstr "Área de trabajo %d" -+msgstr "Área de trabajo %d" - - #: ../extensions/xrandr-indicator/extension.js:30 - msgid "Normal" -@@ -326,269 +325,12 @@ msgstr "Derecha" - - #: ../extensions/xrandr-indicator/extension.js:33 - msgid "Upside-down" --msgstr "Hacia abajo" -+msgstr "De para arriba" - - #: ../extensions/xrandr-indicator/extension.js:50 - msgid "Display" --msgstr "Pantalla" -+msgstr "Mostrar" - - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" --msgstr "Configuración de pantalla" -- --#~ msgid "File System" --#~ msgstr "Sistema de archivos" -- --#~ msgid "The application icon mode." --#~ msgstr "El modo de icono de la aplicación." -- --#~ msgid "" --#~ "Configures how the windows are shown in the switcher. Valid possibilities " --#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" --#~ "only' (shows only the application icon) or 'both'." --#~ msgstr "" --#~ "Configura cómo se muestran las ventanas en el intercambiador. Las " --#~ "opciones posibles son «thumbnail-only» (muestra una miniatura de la " --#~ "ventana, «app-icon-only» (sólo muestra el icono de la aplicación) o " --#~ "«both» (se muestran ambas cosas)." -- --#~ msgid "Devices" --#~ msgstr "Dispositivos" -- --#~ msgid "Bookmarks" --#~ msgstr "Marcadores" -- --#~ msgid "Network" --#~ msgstr "Red" -- --#~ msgid "Drag here to add favorites" --#~ msgstr "Arrastrar aquí para añadir a favoritos" -- --#~ msgid "New Window" --#~ msgstr "Ventana nueva" -- --#~ msgid "Quit Application" --#~ msgstr "Salir de la aplicación" -- --#~ msgid "Remove from Favorites" --#~ msgstr "Quitar de favoritos" -- --#~ msgid "Position of the dock" --#~ msgstr "Posición del tablero" -- --#~ msgid "" --#~ "Sets the position of the dock in the screen. Allowed values are 'right' " --#~ "or 'left'" --#~ msgstr "" --#~ "Configura la posición del tablero en la pantalla. Los valores permitidos " --#~ "son «right» (derecha) o «left» (izquierda)" -- --#~ msgid "Icon size" --#~ msgstr "Tamaño del icono" -- --#~ msgid "Sets icon size of the dock." --#~ msgstr "Configura el tamaño de los íconos del tablero." -- --#~ msgid "Enable/disable autohide" --#~ msgstr "Activar/desactivar ocultación automática" -- --#~ msgid "Autohide effect" --#~ msgstr "Efecto de ocultación automática" -- --#~ msgid "" --#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' " --#~ "and 'move'" --#~ msgstr "" --#~ "Establece el efecto de ocultación del tablero. Los valores permitidos son " --#~ "«resize» (redimensionar) y «rescale» (re-escalar) y «move» (mover)" -- --#~ msgid "Autohide duration" --#~ msgstr "Duración de la ocultación automática" -- --#~ msgid "Sets the time duration of the autohide effect." --#~ msgstr "Configura la duración del efecto de ocultación automática." -- --#~ msgid "Monitor" --#~ msgstr "Pantalla" -- --#~ msgid "" --#~ "Sets monitor to display dock in. The default value (-1) is the primary " --#~ "monitor." --#~ msgstr "" --#~ "Establece la pantalla en la que mostrar el tablero. El valor " --#~ "predeterminado es (-1), que es la pantalla principal." -- --#~ msgid "%s is away." --#~ msgstr "%s no está disponible." -- --#~ msgid "%s is offline." --#~ msgstr "%s está desconectado." -- --#~ msgid "%s is online." --#~ msgstr "%s está conectado." -- --#~ msgid "%s is busy." --#~ msgstr "%s está ocupado." -- --#~ msgid "Removable Devices" --#~ msgstr "Dispositivos extraíbles" -- --#~ msgid "Configure display settings..." --#~ msgstr "Configurar las opciones de pantalla…" -- --#~ msgid "The alt tab behaviour." --#~ msgstr "El comportamiento de Alt+Tab." -- --#~ msgid "" --#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and " --#~ "workspace_icons. See the configuration dialogs for details." --#~ msgstr "" --#~ "Establece el comportamiento de Alt+Tab. Los valores posibles son: " --#~ "«native» (nativo), «all_thumbnails» (todo y miniaturas) y " --#~ "«workspace_icons» (iconos de áreas de trabajo). Para obtener información " --#~ "más detallada, consulte la configuración de los diálogos " -- --#~ msgid "" --#~ "This mode presents all applications from all workspaces in one selection " --#~ "list. Instead of using the application icon of every window, it uses " --#~ "small thumbnails resembling the window itself." --#~ msgstr "" --#~ "Este modo presenta todas las aplicaciones de todas las áreas de trabajo " --#~ "en una lista de selección. En lugar de usar el icono de aplicación de " --#~ "cada ventana, usa pequeñas miniaturas que se asemejan a la propia ventana." -- --#~ msgid "Workspace & Icons" --#~ msgstr "Área de trabajo e iconos" -- --#~| msgid "" --#~| "This mode let's you switch between the applications of your current " --#~| "workspace and gives you additionally the option to switch to the last " --#~| "used application of your previous workspace. This is always the last " --#~| "symbol in the list and is segregated by a separator/vertical line if " --#~| "available. \n" --#~| "Every window is represented by its application icon." --#~ msgid "" --#~ "This mode lets you switch between the applications of your current " --#~ "workspace and gives you additionally the option to switch to the last " --#~ "used application of your previous workspace. This is always the last " --#~ "symbol in the list and is separated by a separator/vertical line if " --#~ "available. \n" --#~ "Every window is represented by its application icon." --#~ msgstr "" --#~ "Este modo le permite alternar entre las aplicaciones de su área de " --#~ "trabajo actual y le da la opción de cambiar a la última aplicación " --#~ "utilizada de su área de trabajo anterior. Este siempre es el último " --#~ "símbolo de la lista y está separado por un separador/línea vertical si " --#~ "está disponible.\n" --#~ "Cada ventana está representada por su icono de aplicación." -- --#~ msgid "Move current selection to front before closing the popup" --#~ msgstr "" --#~ "Mover la selección actual al frente antes de cerrar la ventana emergente" -- --#~ msgid "" --#~ "The Alternate Tab can be used in different modes, that affect the way " --#~ "windows are chosen and presented." --#~ msgstr "" --#~ "La combinación de teclas Alt+Tab se puede usar en diferentes modos, que " --#~ "afectan la manera en que se eligen y presentan las ventanas." -- --#~ msgid "Indicates if Alternate Tab is newly installed" --#~ msgstr "Indica si se ha instalado Alt+Tab recientemente" -- --#~ msgid "Ask the user for a default behaviour if true." --#~ msgstr "" --#~ "Si es cierto, preguntar al usuario el comportamiento predeterminado." -- --#~ msgid "" --#~ "This is the first time you use the Alternate Tab extension. \n" --#~ "Please choose your preferred behaviour:\n" --#~ "\n" --#~ "All & Thumbnails:\n" --#~ " This mode presents all applications from all workspaces in one " --#~ "selection \n" --#~ " list. Instead of using the application icon of every window, it uses " --#~ "small \n" --#~ " thumbnails resembling the window itself. \n" --#~ "\n" --#~ "Workspace & Icons:\n" --#~ " This mode let's you switch between the applications of your current \n" --#~ " workspace and gives you additionally the option to switch to the last " --#~ "used \n" --#~ " application of your previous workspace. This is always the last " --#~ "symbol in \n" --#~ " the list and is segregated by a separator/vertical line if " --#~ "available. \n" --#~ " Every window is represented by its application icon. \n" --#~ "\n" --#~ "If you whish to revert to the default behavior for the Alt-Tab switcher, " --#~ "just\n" --#~ "disable the extension from extensions.gnome.org or the Advanced Settings " --#~ "application." --#~ msgstr "" --#~ "Esta es la primera vez que usa la extensión Alt+Tab. \n" --#~ "Seleccione el comportamiento preferido:\n" --#~ "\n" --#~ "Todo y miniaturas:\n" --#~ " Este modo muestra todas la aplicaciones de todas las áreas de " --#~ "trabajo \n" --#~ " en una única lista. En lugar de usar el icono de la aplicación de " --#~ "cada ventana, usa \n" --#~ " miniaturas similares a la ventana.\n" --#~ "\n" --#~ "Área de trabajo e iconos:\n" --#~ " Este modo permite le alternar entre aplicaciones del área de trabajo " --#~ "actual, \n" --#~ " y ofrece la posibilidad de cambiar a la última aplicación usada en " --#~ "el \n" --#~ " área de trabajo anterior. Éste último es siempre el último símbolo en " --#~ "la \n" --#~ " lista, y está diferenciado mediante un separador/línea vertical, si " --#~ "está \n" --#~ " disponible. \n" --#~ " Cada ventana se representa con el icono de la aplicación. \n" --#~ "\n" --#~ "Si quiere volver al comportamiento predeterminado de Alt+Tab, " --#~ "simplemente\n" --#~ "desactive la extensión desde extensions.gnome.org o en la aplicación " --#~ "Configuración avanzada." -- --#~ msgid "Alt Tab Behaviour" --#~ msgstr "Comportamiento de Alt+Tab" -- --#~ msgid "Cancel" --#~ msgstr "Cancelar" -- --#~ msgid "Notifications" --#~ msgstr "Notificaciones" -- --#~ msgid "Online Accounts" --#~ msgstr "Cuentas en línea" -- --#~ msgid "Lock Screen" --#~ msgstr "Bloquear la pantalla" -- --#~ msgid "Switch User" --#~ msgstr "Cambiar de usuario" -- --#~ msgid "Log Out..." --#~ msgstr "Cerrar la sesión…" -- --#~ msgid "" --#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use " --#~ "the default grid based algorithm, 'natural' to use another one that " --#~ "reflects more the position and size of the actual window" --#~ msgstr "" --#~ "El algoritmo usado para situar las miniaturas en la vista previa. " --#~ "«grid» (tabla) para usar el algoritmo predeterminado basado en una tabla, " --#~ "«natural» para usar otro que refleja mejor la posición y tamaño de la " --#~ "ventana representada." -- --#~ msgid "Window placement strategy" --#~ msgstr "Estrategia de ubicación de ventanas" -- --#~ msgid "Available" --#~ msgstr "Disponible" -- --#~ msgid "Busy" --#~ msgstr "Ocupado" -+msgstr "Mostrar parámetros" -diff -up gnome-shell-extensions-3.8.4/po/fr.po.translations gnome-shell-extensions-3.8.4/po/fr.po ---- gnome-shell-extensions-3.8.4/po/fr.po.translations 2013-07-16 07:12:50.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/fr.po 2013-12-12 00:35:58.466258672 -0500 -@@ -2,94 +2,93 @@ - # Copyright (C) 2011-12 Listed translators - # This file is distributed under the same license as the gnome-shell-extensions package. - # Claude Paroz , 2011. --# -+# Sam Friedmann , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions master\n" - "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" - "shell&keywords=I18N+L10N&component=extensions\n" - "POT-Creation-Date: 2012-04-30 14:43+0000\n" --"PO-Revision-Date: 2012-03-24 17:30+0100\n" --"Last-Translator: Alain Lojewski \n" -+"PO-Revision-Date: 2013-10-08 09:59-0400\n" -+"Last-Translator: Sam Friedmann \n" - "Language-Team: GNOME French Team \n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: fr\n" - "Plural-Forms: nplurals=2; plural=(n > 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1 --msgid "The alt tab behaviour." --msgstr "Le comportement d'alt+tab." -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "GNOME Classic" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2 --msgid "" --"Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and " --"workspace_icons. See the configuration dialogs for details." --msgstr "" --"Définit le comportement d'alt+tab. Les valeurs possibles sont : " --"« all_thumbnails » et « workspace_icons ». Consultez les messages de " --"configuration pour plus de détails." -- --#: ../extensions/alternate-tab/prefs.js:27 --msgid "All & Thumbnails" --msgstr "Tous et vignettes" -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "Cette session vous connecte à GNOME Classic" - --#: ../extensions/alternate-tab/prefs.js:28 --msgid "" --"This mode presents all applications from all workspaces in one selection " --"list. Instead of using the application icon of every window, it uses small " --"thumbnails resembling the window itself." --msgstr "" --"Ce mode présente toutes les applications de tous les espaces de travail dans " --"une liste à sélection unique. À la place de l'icône de l'application de " --"chaque fenêtre, il utilise de petites vignettes ressemblant à la fenêtre " --"elle-même." -- --#: ../extensions/alternate-tab/prefs.js:34 --msgid "Workspace & Icons" --msgstr "Espace de travail et icônes" -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "GNOME Shell Classic" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "Gestion de fenêtres et lancement d'applications" - --#: ../extensions/alternate-tab/prefs.js:35 -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "Attacher les dialogues modaux à leur fenêtre parente" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" --"This mode let's you switch between the applications of your current " --"workspace and gives you additionally the option to switch to the last used " --"application of your previous workspace. This is always the last symbol in " --"the list and is segregated by a separator/vertical line if available. \n" --"Every window is represented by its application icon." -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." - msgstr "" --"Ce mode vous permet de permuter entre les applications de votre espace de " --"travail actuel et vous donne en plus la possibilité de revenir à la dernière " --"application utilisée dans l'espace de travail précédent. C'est toujours le " --"dernier symbole dans la liste, et si disponible, il est isolé par une ligne " --"verticale ou un séparateur. \n" --"Chaque fenêtre est représentée par l'icône de son application." -+"Cette clé prend le pas sur la clé dans org.gnome.mutter lorsque GNOME Shell " -+"est lancé." - --#: ../extensions/alternate-tab/prefs.js:41 --msgid "Move current selection to front before closing the popup" -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" - msgstr "" --"Déplacer la sélection actuelle à l'avant avant de fermer la fenêtre " --"surgissante" -+"Activer les mosaïques de bords lorsque des fenêtres sont déposées sur les " -+"bords de l'écran" - --#: ../extensions/alternate-tab/prefs.js:58 --msgid "" --"The Alternate Tab can be used in different modes, that affect the way " --"windows are chosen and presented." --msgstr "" --"La combinaison alt+tab peut être utilisée dans différents modes, qui " --"influent sur la façon dont les fenêtres sont sélectionnées et présentées." -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "Espaces de travail sur l'écran principal uniquement" -+ -+#: ../extensions/alternate-tab/prefs.js:20 -+msgid "Thumbnail only" -+msgstr "Vignette uniquement" -+ -+#: ../extensions/alternate-tab/prefs.js:21 -+msgid "Application icon only" -+msgstr "Icône de l'application uniquement" -+ -+#: ../extensions/alternate-tab/prefs.js:22 -+msgid "Thumbnail and application icon" -+msgstr "Icône de la vignette et de l'application" -+ -+#: ../extensions/alternate-tab/prefs.js:37 -+msgid "Present windows as" -+msgstr "Présenter les fenêtres en tant que" -+ -+#: ../extensions/alternate-tab/prefs.js:62 -+msgid "Show only windows in the current workspace" -+msgstr "Uniquement afficher les fenêtres dans l'espace de travail actuel" - - #. add the new entries --#: ../extensions/alternative-status-menu/extension.js:68 -+#: ../extensions/alternative-status-menu/extension.js:125 - msgid "Suspend" - msgstr "Mettre en veille" - --#: ../extensions/alternative-status-menu/extension.js:73 -+#: ../extensions/alternative-status-menu/extension.js:128 - msgid "Hibernate" - msgstr "Hiberner" - --#: ../extensions/alternative-status-menu/extension.js:78 --msgid "Power Off..." --msgstr "Éteindre..." -+#: ../extensions/alternative-status-menu/extension.js:131 -+msgid "Power Off" -+msgstr "Éteindre" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 - msgid "Enable suspending" -@@ -107,6 +106,18 @@ msgstr "Activer l'hibernation" - msgid "Control the visibility of the Hibernate menu item" - msgstr "Gère la visibilité de l'élément de menu « hibernation »" - -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "Vue d'ensemble des activités" -+ -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "Favoris" -+ -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "Applications" -+ - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 - msgid "Application and workspace list" - msgstr "Liste d'applications et d'espaces de travail" -@@ -141,85 +152,18 @@ msgstr "Créer une nouvelle règle de co - msgid "Add" - msgstr "Ajouter" - --#: ../extensions/dock/extension.js:577 --msgid "Drag here to add favorites" --msgstr "Glissez ici pour ajouter des favoris" -- --#: ../extensions/dock/extension.js:903 --msgid "New Window" --msgstr "Nouvelle fenêtre" -- --#: ../extensions/dock/extension.js:905 --msgid "Quit Application" --msgstr "Quitter l'application" -- --#: ../extensions/dock/extension.js:910 --msgid "Remove from Favorites" --msgstr "Enlever des favoris" -- --#: ../extensions/dock/extension.js:911 --msgid "Add to Favorites" --msgstr "Ajouter aux favoris" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1 --msgid "Position of the dock" --msgstr "Position du bandeau" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2 --msgid "" --"Sets the position of the dock in the screen. Allowed values are 'right' or " --"'left'" --msgstr "" --"Définit la position du bandeau sur l'écran. Les valeurs possibles sont : " --"right et left." -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3 --msgid "Icon size" --msgstr "Taille d'icône" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4 --msgid "Sets icon size of the dock." --msgstr "Définit la taille des icônes du bandeau." -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5 --msgid "Enable/disable autohide" --msgstr "Activer/désactiver le masquage automatique" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6 --msgid "Autohide effect" --msgstr "Effet de masquage automatique" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7 --msgid "" --"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and " --"'move'" --msgstr "" --"Définit l'effet de masquage du bandeau. Les valeurs possibles sont : resize, " --"rescale et move." -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8 --msgid "Autohide duration" --msgstr "Durée du masquage automatique" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9 --msgid "Sets the time duration of the autohide effect." --msgstr "Définit la durée de l'effet de masquage automatique." -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10 --msgid "Monitor" --msgstr "Écran" -+#: ../extensions/drive-menu/extension.js:72 -+#, c-format -+msgid "Ejecting drive '%s' failed:" -+msgstr "Échec de l'éjection du disque « %s » :" - --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11 --msgid "" --"Sets monitor to display dock in. The default value (-1) is the primary " --"monitor." --msgstr "" --"Definit l'écran qui affiche le dock. La valeur par défaut (-1) représente " --"l'écran principal." -+#: ../extensions/drive-menu/extension.js:89 -+msgid "Removable devices" -+msgstr "Périphériques amovibles" - --#: ../extensions/drive-menu/extension.js:66 --msgid "Open file manager" --msgstr "Ouvrir le gestionnaire de fichiers" -+#: ../extensions/drive-menu/extension.js:106 -+msgid "Open File" -+msgstr "Ouvrir le fichier" - - #: ../extensions/example/extension.js:17 - msgid "Hello, world!" -@@ -253,26 +197,6 @@ msgstr "" - msgid "Message:" - msgstr "Message :" - --#: ../extensions/gajim/extension.js:227 --#, c-format --msgid "%s is away." --msgstr "%s est absent(e)." -- --#: ../extensions/gajim/extension.js:230 --#, c-format --msgid "%s is offline." --msgstr "%s n'est pas en ligne." -- --#: ../extensions/gajim/extension.js:233 --#, c-format --msgid "%s is online." --msgstr "%s est en ligne." -- --#: ../extensions/gajim/extension.js:236 --#, c-format --msgid "%s is busy." --msgstr "%s est occupé(e)." -- - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 - msgid "Use more screen for windows" - msgstr "Utiliser plus d'écran pour les fenêtres" -@@ -303,9 +227,35 @@ msgstr "" - "dessous. Pour que ce paramètre soit pris en compte, il faut redémarrer le " - "shell." - --#: ../extensions/places-menu/extension.js:37 --msgid "Removable Devices" --msgstr "Périphériques amovibles" -+#: ../extensions/places-menu/extension.js:77 -+msgid "Places" -+msgstr "Emplacements" -+ -+#: ../extensions/places-menu/placeDisplay.js:56 -+#, c-format -+msgid "Failed to launch \"%s\"" -+msgstr "Échec du lancement de « %s »" -+ -+#: ../extensions/places-menu/placeDisplay.js:98 -+#: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "Ordinateur" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "Accueil" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "Explorer le réseau" -+ -+#: ../extensions/systemMonitor/extension.js:213 -+msgid "CPU" -+msgstr "CPU" -+ -+#: ../extensions/systemMonitor/extension.js:266 -+msgid "Memory" -+msgstr "Mémoire" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 - msgid "Theme name" -@@ -315,6 +265,35 @@ msgstr "Nom du thème" - msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" - msgstr "Le nom du thème, à charger à partir de ~/.themes/name/gnome-shell" - -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "À quel moment grouper les fenêtres" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"Décide à quel moment grouper les fenêtres de la même application sur la " -+"liste des fenêtres. Les valeurs possibles sont « never » (jamais), « auto » " -+"et « always » (toujours)." -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "Groupement de fenêtres" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "Ne jamais grouper de fenêtres" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "Grouper les fenêtres lorsque l'espace est limité" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "Toujours grouper les fenêtres" -+ - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" - msgstr "Indicateur d'espace de travail" -@@ -348,6 +327,10 @@ msgstr "Droite" - msgid "Upside-down" - msgstr "Renversé" - --#: ../extensions/xrandr-indicator/extension.js:82 --msgid "Configure display settings..." --msgstr "Configurer les paramètres d'affichage..." -+#: ../extensions/xrandr-indicator/extension.js:50 -+msgid "Display" -+msgstr "Afficher" -+ -+#: ../extensions/xrandr-indicator/extension.js:80 -+msgid "Display Settings" -+msgstr "Afficher les paramètres" -diff -up gnome-shell-extensions-3.8.4/po/gu.po.translations gnome-shell-extensions-3.8.4/po/gu.po ---- gnome-shell-extensions-3.8.4/po/gu.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/gu.po 2013-12-12 00:35:58.467258669 -0500 -@@ -1,22 +1,18 @@ --# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER --# This file is distributed under the same license as the PACKAGE package. --# --# , 2013. -+# swkothar , 2013. #zanata - msgid "" - msgstr "" --"Project-Id-Version: \n" --"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug." --"cgi?product=gnome-shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2013-07-13 21:51+0000\n" --"PO-Revision-Date: 2013-07-19 14:42+0530\n" --"Last-Translator: \n" --"Language-Team: American English \n" --"Language: \n" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-09-24 03:24-0400\n" -+"Last-Translator: swkothar \n" -+"Language-Team: Gujarati\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"X-Generator: Lokalize 1.0\n" --"Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"Language: gu\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n != 1)\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -25,7 +21,7 @@ msgstr "GNOME ક્લાસિક" - - #: ../data/gnome-classic.desktop.in.h:2 - msgid "This session logs you into GNOME Classic" --msgstr "આ સત્ર તમને GNOME ક્લાસિકમાં પ્રવેશ આપે છે" -+msgstr "આ સત્ર એ GNOME ક્લાસિકમાં તમને પ્રવેશ આપે છે" - - #: ../data/gnome-shell-classic.desktop.in.in.h:1 - msgid "GNOME Shell Classic" -@@ -37,13 +33,13 @@ msgstr "વિન્ડો સંચા� - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 - msgid "Attach modal dialog to the parent window" --msgstr "મુખ્ય વિન્ડોમાં મોડલ સંવાદને જોડો" -+msgstr "મુખ્ય વિન્ડોમાં મોડલ સંવાદ સાથે જોડાવો" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" - "This key overrides the key in org.gnome.mutter when running GNOME Shell." - msgstr "" --"આ કી org.gnome.mutter માં કી ઉપર લખાઇ જશે જ્યારે GNOME Shell ચાલી રહ્યુ હોય." -+"આ કી એ org.gnome.mutter માં કી પર લખે છે જ્યારે GNOME શેલને ચલાવી રહ્યા હોય." - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 - msgid "Enable edge tiling when dropping windows on screen edges" -@@ -53,7 +49,7 @@ msgstr "" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 - msgid "Workspaces only on primary monitor" --msgstr "ફક્ત પ્રાથમિક મોનિટર પર કામ કરવાની જગ્યા" -+msgstr "પ્રાથમિક મોનિટર પર ફક્ત કામ કરવાની જગ્યાઓ" - - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" -@@ -69,16 +65,16 @@ msgstr "થમ્ભનેઇલ અન� - - #: ../extensions/alternate-tab/prefs.js:37 - msgid "Present windows as" --msgstr "આ તરીકે વિન્ડોને હાજર કરો" -+msgstr "આ તરીકે મુખ્ય વિન્ડો" - - #: ../extensions/alternate-tab/prefs.js:62 - msgid "Show only windows in the current workspace" --msgstr "વર્તમાન કામ કરવાની જગ્યામાં ફક્ત વિન્ડોને બતાવો" -+msgstr "હાલની કાર્ય કરવાની જગ્યામાં ફક્ત વિન્ડોને બતાવો" - - #. add the new entries - #: ../extensions/alternative-status-menu/extension.js:125 - msgid "Suspend" --msgstr "અટકાવો" -+msgstr "સ્થગિત" - - #: ../extensions/alternative-status-menu/extension.js:128 - msgid "Hibernate" -@@ -90,23 +86,23 @@ msgstr "પાવર બંધ" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 - msgid "Enable suspending" --msgstr "$name ને લટકાવી રહ્યા છે" -+msgstr "સ્થગિત કરવાનું સક્રિય કરો" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 - msgid "Control the visibility of the Suspend menu item" --msgstr "હાઇબરનેટ મેનુ વસ્તુની દૃશ્યતાને નિયંત્રિત કરો" -+msgstr "સ્થગિત મેનુ વસ્તુની દૃશ્યતા પર નિયંત્રણ કરો" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 - msgid "Enable hibernating" --msgstr "હાઇબરનેટીંગને સક્રિય કરો" -+msgstr "હાઇબરનેટીંગ સક્રિય કરો" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 - msgid "Control the visibility of the Hibernate menu item" --msgstr "હાઇબરનેટ મેનુ વસ્તુની દૃશ્યતાને નિયંત્રિત કરો" -+msgstr "હાઇબરનેટ મેનુ વસ્તુની દૃશ્યતા પર નિયંત્રણ કરો" - - #: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" --msgstr "પ્રવૃત્તિ દૃશ્ય" -+msgstr "પ્રવૃત્તિ ઝાંખી" - - #: ../extensions/apps-menu/extension.js:113 - msgid "Favorites" -@@ -118,15 +114,15 @@ msgstr "કાર્યક્રમો" - - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 - msgid "Application and workspace list" --msgstr "કાર્યક્રમ અને કામ કરવાની જગ્યાની યાદી" -+msgstr "કાર્યક્રમ અને કાર્ય કરવાની જગ્યાની યાદી" - - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 - msgid "" - "A list of strings, each containing an application id (desktop file name), " - "followed by a colon and the workspace number" - msgstr "" --"શબ્દમાળાઓની યાદી, દરેક રંગ અને કામ કરવાની જગ્યા નંબર દ્દારા અનુસરેલ " --"કાર્યક્રમ id (ડેસ્કટોપ ફાઇલ નામ) ને સામવી રહ્યુ છે" -+"શબ્દમાળાઓની યાદી, દરેક કાર્યક્રમ id ને સમાવી રહ્યા છે (ડેસ્કટોપ ફાઇલ નામ), " -+"અવતરણચિહ્ન અને કાર્ય કરવાની જગ્યા નંબર દ્દારા અનૂસરેલ છે" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" -@@ -139,11 +135,11 @@ msgstr "કાર્ય કરવાન� - - #: ../extensions/auto-move-windows/prefs.js:80 - msgid "Add rule" --msgstr "નિયમ ઉમેરો" -+msgstr "નિયમને ઉમેરો" - - #: ../extensions/auto-move-windows/prefs.js:94 - msgid "Create new matching rule" --msgstr "નવીં બંધબેસતા નિયમને બનાવો" -+msgstr "નવાં બંધબેસતા નિયમને બનાવો" - - #: ../extensions/auto-move-windows/prefs.js:98 - msgid "Add" -@@ -152,7 +148,7 @@ msgstr "ઉમેરો" - #: ../extensions/drive-menu/extension.js:72 - #, c-format - msgid "Ejecting drive '%s' failed:" --msgstr "ડ્રાઇવ '%s' બહાર નીકાળતી વખતે નિષ્ફળતા:" -+msgstr "ડ્રાઇવ '%s' બહાર નીકાળી રહ્યા હોય ત્યારે નિષ્ફળતા:" - - #: ../extensions/drive-menu/extension.js:89 - msgid "Removable devices" -@@ -160,7 +156,7 @@ msgstr "દૂર કરી શકાય - - #: ../extensions/drive-menu/extension.js:106 - msgid "Open File" --msgstr "ફાઇલને ખોલો" -+msgstr "ફાઇલ ખોલો" - - #: ../extensions/example/extension.js:17 - msgid "Hello, world!" -@@ -168,14 +164,14 @@ msgstr "કેમ છો, દુનિ� - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 - msgid "Alternative greeting text." --msgstr "વૈકલ્પિક શુભેચ્છા લખાણ." -+msgstr "વૈકલ્પિક શુભેચ્છા લખાણ" - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 - msgid "" - "If not empty, it contains the text that will be shown when clicking on the " - "panel." - msgstr "" --"જો ખાલી ન હોય તો, તે લખાણને સમાવે છે કે જે બતાવશે જ્યારે પેનલ પર ક્લિક કરી " -+"જો ખાલી ન હોય તો,તે લખાણને સમાવે છે કે જે બતાવેલ છે જ્યારે પેનલ પર ક્લિક કરી " - "રહ્યા હોય." - - #. TRANSLATORS: Example is the name of the extension, should not be -@@ -186,10 +182,9 @@ msgid "" - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." - msgstr "" --"શેલ માટે સારી વર્તણૂકવાળા શેલ એક્સટેન્શનને કેવી રીતે બનાવવા તે આ ઉદાહરણ " --"બતાવે છે તેની સાથે તેની પાસે તેની પોતાની " --"પર થોડી કાર્યક્ષમતા છે.\n" --"તેમ છતાં શુભેચ્છા સંદેશ કસ્ટમાઇઝ કરવા માટે શક્ય છે." -+"કેવી રીતે શેલ માટે ઍક્સટેન્શનને સારી રીતે બનાવે છે ઉદાહરણને બતાવવા ધ્યેય " -+"રાખે છે તેની પાસે તેનાં પોતાના પર થોડી કાર્યક્ષમતા છે.\n" -+"તોપણ તે સંદેશા શુભેચ્છાને વૈવિધ્યપૂર્ણ બનાવવાનું શક્ય છે." - - #: ../extensions/example/prefs.js:36 - msgid "Message:" -@@ -197,7 +192,7 @@ msgstr "સંદેશો:" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 - msgid "Use more screen for windows" --msgstr "વિન્ડો માટે વધારે સ્ક્રીનને વાપરો" -+msgstr "વિન્ડોની વધારે સ્ક્રીનને વાપરો" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 - msgid "" -@@ -205,15 +200,13 @@ msgid "" - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." - msgstr "" --"સ્ક્રીન આશરે દરને અપનાવીને વિન્ડો થમ્ભનેઇલને સ્થિત કરવા માટે વધારે " --"સ્ક્રીનને વાપરવાનો પ્રયત્ન " --"કરો, અને બાઉન્ડીંગ બોક્સને ઘટાડવા માટે તેઓને આગળ આશ્ર્વાસન આપો. આ સુયોજન " --"ફક્ત કુદરતી સ્થાન " --"યોજના સાથે લાગુ થાય છે." -+"સ્ક્રીન આશરે દરને સ્વીકારીને વિન્ડો થમ્ભનેઇલને સ્થિત કરવા માટે વધારે " -+"સ્ક્રીનને વાપરવા માટે પ્રયત્ન કરો, અને બાઉન્ડીંગ બોક્સને ઘટાડવા માટે તેઓને " -+"મજબૂત બનાવે છે. આ સુયોજન ફક્ત કુદરતી સ્થાન વ્યૂહરચના સાથે લાગુ કરે છે." - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" --msgstr "ટોચે વિન્ડો કૅપ્શન વિન્ડોને સ્થિત કરો" -+msgstr "ટોચ પર વિન્ડો કૅપ્શનને સ્થિત કરો" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 - msgid "" -@@ -221,9 +214,9 @@ msgid "" - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." - msgstr "" --"જો true હોય તો, થમ્ભનેઇલ પર કૅપ્શન વિન્ડોને સ્થિત કરો, નીચે તેને સ્થિત " --"કરીને શેલ મૂળભૂત પર લખી રહ્યા છે. આ સુયોજનને બદલવાથી કોઇપણ અસર લાવવા માટે " --"શેલને પુન:શરૂ કરવાની જરૂર છે." -+"જો true હોય તો, સંબંધિત થમ્ભનેઇલ ટોચ પર વિન્ડો કૅપ્શનને સ્થિત કરો, નીચે તેને " -+"સ્થિત કરીને મૂળભૂત શેલ પર લખાઇ રહ્યુ છે. આ સુયોજનમાં ફેરફાર કરવાથી કોઇપણ અસર " -+"રાખવા શેલને પુન:શરૂ કરવાની જરૂર છે." - - #: ../extensions/places-menu/extension.js:77 - msgid "Places" -@@ -257,32 +250,31 @@ msgstr "મેમરી" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 - msgid "Theme name" --msgstr "થીમનું નામ" -+msgstr "થીમ નામ" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 - msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" --msgstr "થીમનું નામ, ~/.themes/name/gnome-shell માંથી લાવવા માટે" -+msgstr "~/.themes/name/gnome-shell માંથી લાવવા માટે થીમનું નામ" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 - msgid "When to group windows" --msgstr "વિન્ડોના જૂથ ક્યારે પાડવા" -+msgstr "ક્યારે વિન્ડોનું જૂથ કરવુ છે" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 - msgid "" - "Decides when to group windows from the same application on the window list. " - "Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"વિન્ડોની મેનુ પર એક જ કાર્યક્રમમાંથી વિન્ડોના જૂથો કયારે પાડવા તે નક્કી કરે " --"છે. \"ક્યારેય " --"નહિ\", \"આપોઆપ\" અને \"હંમેશા\" તેની શક્ય કિંમતો છે." -+"નક્કી કરો કે ક્યારે વિન્ડો યાદી પર એજ કાર્યક્રમમાંથી વિન્ડો જૂથને બનાવવુ છે. " -+"શક્ય કિંમતો \"કદી નહિં\", \"આપોઆપ\" અને \"હંમેશા\" છે." - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" --msgstr "વિન્ડો જૂથ થઈ રહ્યુ છે" -+msgstr "વિન્ડો જૂથ" - - #: ../extensions/window-list/prefs.js:49 - msgid "Never group windows" --msgstr "જૂથ વિન્ડો કદી નહિં" -+msgstr "ક્યારેય જૂથ વિન્ડો નહિં" - - #: ../extensions/window-list/prefs.js:50 - msgid "Group windows when space is limited" -@@ -294,11 +286,11 @@ msgstr "હંમેશા જૂથ વ - - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" --msgstr "કામ કરવાની જગ્યાનું સૂચક" -+msgstr "કામ કરવાની જગ્યા સૂચક" - - #: ../extensions/workspace-indicator/prefs.js:141 - msgid "Workspace names:" --msgstr "કામ કરવાની જગ્યાના નામો:" -+msgstr "કામ કરવાની જગ્યા નામો:" - - #: ../extensions/workspace-indicator/prefs.js:152 - msgid "Name" -@@ -315,11 +307,11 @@ msgstr "સામાન્ય" - - #: ../extensions/xrandr-indicator/extension.js:31 - msgid "Left" --msgstr "ડાબું" -+msgstr "ડાબુ" - - #: ../extensions/xrandr-indicator/extension.js:32 - msgid "Right" --msgstr "જમણું" -+msgstr "જમણુ" - - #: ../extensions/xrandr-indicator/extension.js:33 - msgid "Upside-down" -@@ -331,5 +323,4 @@ msgstr "દર્શાવ" - - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" --msgstr "દર્શાવ સુયોજનો" -- -+msgstr "દર્શાવ સુયોજન" -diff -up gnome-shell-extensions-3.8.4/po/hi.po.translations gnome-shell-extensions-3.8.4/po/hi.po ---- gnome-shell-extensions-3.8.4/po/hi.po.translations 2013-12-12 00:35:58.467258669 -0500 -+++ gnome-shell-extensions-3.8.4/po/hi.po 2013-12-12 00:35:58.467258669 -0500 -@@ -0,0 +1,326 @@ -+# rranjan , 2013. #zanata -+msgid "" -+msgstr "" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-11-11 04:00-0500\n" -+"Last-Translator: rranjan \n" -+"Language-Team: Hindi\n" -+"MIME-Version: 1.0\n" -+"Content-Type: text/plain; charset=UTF-8\n" -+"Content-Transfer-Encoding: 8bit\n" -+"Language: hi\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n != 1)\n" -+ -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "GNOME क्लासिक" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "यह सत्र गनोम क्लासिक में आपको लॉगइन करेगा" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "गनोम शैल क्लासिक" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "विंडो प्रबंधन और अनुप्रयोग लॉन्चिंग" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "जनक विंडो में मोडल संवाद संलग्न करें" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "" -+"यह कुँजी org.gnome.mutter में कुँजी को अधिरोहित करता है जब गनोम शेल को चला " -+"रहा हो." -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "जब स्क्रीन किनारे पर विंडोज़ को छोड़ने बढ़त टाइलिंग सक्षम करें" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "केवल प्राथमिक मॉनिटर पर कार्यस्थान" -+ -+#: ../extensions/alternate-tab/prefs.js:20 -+msgid "Thumbnail only" -+msgstr "केवल लघुचित्र" -+ -+#: ../extensions/alternate-tab/prefs.js:21 -+msgid "Application icon only" -+msgstr "केवल अनुप्रयोग चिह्न" -+ -+#: ../extensions/alternate-tab/prefs.js:22 -+msgid "Thumbnail and application icon" -+msgstr "लघुचित्र और अनुप्रयोग चिह्न" -+ -+#: ../extensions/alternate-tab/prefs.js:37 -+msgid "Present windows as" -+msgstr "विंडोज बतौर ऐसे प्रस्तुत करता है" -+ -+#: ../extensions/alternate-tab/prefs.js:62 -+msgid "Show only windows in the current workspace" -+msgstr "मौजूदा कार्यस्थान में केवल विंडोज दिखाता है" -+ -+#. add the new entries -+#: ../extensions/alternative-status-menu/extension.js:125 -+msgid "Suspend" -+msgstr "स्थगित करें" -+ -+#: ../extensions/alternative-status-menu/extension.js:128 -+msgid "Hibernate" -+msgstr "सुप्तावस्था में ले जाएँ" -+ -+#: ../extensions/alternative-status-menu/extension.js:131 -+msgid "Power Off" -+msgstr "बंद करें" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 -+msgid "Enable suspending" -+msgstr "स्थगन सक्रिय करें" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 -+msgid "Control the visibility of the Suspend menu item" -+msgstr "स्थगन मेन्यू मद की दृश्यता नियंत्रित करें" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 -+msgid "Enable hibernating" -+msgstr "स्थगन सक्रिय करें" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 -+msgid "Control the visibility of the Hibernate menu item" -+msgstr "सुप्तावस्था मेन्यू मद की दृश्यता नियंत्रित करें" -+ -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "गतिविधि सारांश" -+ -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "पसंदीदा" -+ -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "अनुप्रयोग" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 -+msgid "Application and workspace list" -+msgstr "अनुप्रयोग और कार्यस्थान सूची" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 -+msgid "" -+"A list of strings, each containing an application id (desktop file name), " -+"followed by a colon and the workspace number" -+msgstr "" -+"स्ट्रिंग की सूची जिसमें से हर कोई किसी अनुप्रयोग आईडी (desktop file name) को " -+"समाहित करता है, कॉलन और कार्यस्थान संख्या के द्वारा अनुसरित" -+ -+#: ../extensions/auto-move-windows/prefs.js:55 -+msgid "Application" -+msgstr "अनुप्रयोग" -+ -+#: ../extensions/auto-move-windows/prefs.js:64 -+#: ../extensions/auto-move-windows/prefs.js:106 -+msgid "Workspace" -+msgstr "कार्यस्थान" -+ -+#: ../extensions/auto-move-windows/prefs.js:80 -+msgid "Add rule" -+msgstr "नियम जोड़ें" -+ -+#: ../extensions/auto-move-windows/prefs.js:94 -+msgid "Create new matching rule" -+msgstr "नया मिलानयुक्त नियम बनाएं" -+ -+#: ../extensions/auto-move-windows/prefs.js:98 -+msgid "Add" -+msgstr "जोड़ें" -+ -+#: ../extensions/drive-menu/extension.js:72 -+#, c-format -+msgid "Ejecting drive '%s' failed:" -+msgstr "'%s' को निकालना विफल:" -+ -+#: ../extensions/drive-menu/extension.js:89 -+msgid "Removable devices" -+msgstr "हटाने योग्य युक्तियाँ" -+ -+#: ../extensions/drive-menu/extension.js:106 -+msgid "Open File" -+msgstr "फ़ाइल खोलें" -+ -+#: ../extensions/example/extension.js:17 -+msgid "Hello, world!" -+msgstr "हेलो, दुनिया!" -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 -+msgid "Alternative greeting text." -+msgstr "वैकल्पिक आरंभिक पाठ." -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 -+msgid "" -+"If not empty, it contains the text that will be shown when clicking on the " -+"panel." -+msgstr "" -+"यदि रिक्त नहीं है, यह उस पाठ को समाहित करता है जो पटल पर क्लिक किए जाने के " -+"कारण दिखाया जाएगा." -+ -+#. TRANSLATORS: Example is the name of the extension, should not be -+#. translated -+#: ../extensions/example/prefs.js:30 -+msgid "" -+"Example aims to show how to build well behaved extensions for the Shell and " -+"as such it has little functionality on its own.\n" -+"Nevertheless it's possible to customize the greeting message." -+msgstr "" -+"उदाहरण दिखाने के लिए लक्षित है शेल के लिए सुविचारित विस्तार निर्मित करने के " -+"लिए और इसका काफी कम काम है स्वयं के लिए.\n" -+"हालाँकि, शुभकामना संदेश को पसंदीदा बनाना संभव है." -+ -+#: ../extensions/example/prefs.js:36 -+msgid "Message:" -+msgstr "संदेश:" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 -+msgid "Use more screen for windows" -+msgstr "विंडोज के लिए अधिक स्क्रीन का उपयोग करें" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 -+msgid "" -+"Try to use more screen for placing window thumbnails by adapting to screen " -+"aspect ratio, and consolidating them further to reduce the bounding box. " -+"This setting applies only with the natural placement strategy." -+msgstr "" -+"विंडोज लघुचित्र रखने के लिए अधिक स्क्रीन के उपयोग की कोशिश करें स्क्रीन पहलू " -+"अनुपात से अनुकूलित करते हुए, और उन्हें बाउंडिंग बॉक्स में आगे कम करते हुए " -+"एकत्रित करते हुए. यह सेटिंग स्वभावित प्लेसमेंट रणनीति के साथ केवल लागू होता " -+"है." -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 -+msgid "Place window captions on top" -+msgstr "शीर्ष पर विंडो अनुशीर्षक रखें" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 -+msgid "" -+"If true, place window captions on top the respective thumbnail, overriding " -+"shell default of placing it at the bottom. Changing this setting requires " -+"restarting the shell to have any effect." -+msgstr "" -+"यदि सही है, संबंधित लघुचित्रों पर विंडो अनुशीर्षक रखें, शेल तयशुदा को इसके " -+"तल पर रखते हुए. इस सेटिंग को बदलने के लिए किसी प्रभाव के लिए शेल को फिर से " -+"आरंभ करना जरूरी है." -+ -+#: ../extensions/places-menu/extension.js:77 -+msgid "Places" -+msgstr "स्थान" -+ -+#: ../extensions/places-menu/placeDisplay.js:56 -+#, c-format -+msgid "Failed to launch \"%s\"" -+msgstr "\"%s\" लॉन्च करने में विफल" -+ -+#: ../extensions/places-menu/placeDisplay.js:98 -+#: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "कंप्यूटर" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "घर" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "संजाल ब्राउज़ करें" -+ -+#: ../extensions/systemMonitor/extension.js:213 -+msgid "CPU" -+msgstr "CPU" -+ -+#: ../extensions/systemMonitor/extension.js:266 -+msgid "Memory" -+msgstr "स्मृति" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 -+msgid "Theme name" -+msgstr "प्रसंग नाम" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 -+msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -+msgstr "प्रसंग का नाम, ~/.themes/name/gnome-shell से लोड किया गया" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "कब विंडोज को समूहित किया जाना है" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"विंडो सूची पर समान अनुप्रयोग से विंडो को कब समूहित करना है को निर्धारित करता " -+"है. संभावित मान है \"never\", \"auto\" और \"always\"." -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "विंडो समूहन" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "विंडोज को कभी समूहित मत करें" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "विंडोज समूहित करें जब स्थान सीमित है" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "हमेशा विंडोज समूहित करें" -+ -+#: ../extensions/workspace-indicator/extension.js:30 -+msgid "Workspace Indicator" -+msgstr "कार्यस्थान सूचक" -+ -+#: ../extensions/workspace-indicator/prefs.js:141 -+msgid "Workspace names:" -+msgstr "कार्यस्थान नाम:" -+ -+#: ../extensions/workspace-indicator/prefs.js:152 -+msgid "Name" -+msgstr "नाम" -+ -+#: ../extensions/workspace-indicator/prefs.js:186 -+#, c-format -+msgid "Workspace %d" -+msgstr "कार्यस्थान %d" -+ -+#: ../extensions/xrandr-indicator/extension.js:30 -+msgid "Normal" -+msgstr "सामान्य" -+ -+#: ../extensions/xrandr-indicator/extension.js:31 -+msgid "Left" -+msgstr "बायाँ" -+ -+#: ../extensions/xrandr-indicator/extension.js:32 -+msgid "Right" -+msgstr "दाहिना" -+ -+#: ../extensions/xrandr-indicator/extension.js:33 -+msgid "Upside-down" -+msgstr "अपसाइड-डाउन" -+ -+#: ../extensions/xrandr-indicator/extension.js:50 -+msgid "Display" -+msgstr "दिखाएँ" -+ -+#: ../extensions/xrandr-indicator/extension.js:80 -+msgid "Display Settings" -+msgstr "सेटिंग दिखाएँ" -diff -up gnome-shell-extensions-3.8.4/po/it.po.translations gnome-shell-extensions-3.8.4/po/it.po ---- gnome-shell-extensions-3.8.4/po/it.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/it.po 2013-12-12 00:35:58.467258669 -0500 -@@ -3,20 +3,21 @@ - # This file is distributed under the same license as the gnome-shell-extensions package. - # Giovanni Campagna , 2011 - # Milo Casagrande , 2013. --# -+# fvalen , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-03-20 10:05+0100\n" --"PO-Revision-Date: 2013-03-20 10:05+0100\n" --"Last-Translator: Milo Casagrande \n" -+"PO-Revision-Date: 2013-09-24 01:42-0400\n" -+"Last-Translator: fvalen \n" - "Language-Team: Italian \n" --"Language: it\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8-bit\n" -+"Language: it\n" - "Plural-Forms: nplurals=2; plural=(n!=1);\n" -+"X-Generator: Zanata 3.1.2\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -35,6 +36,27 @@ msgstr "GNOME Shell classico" - msgid "Window management and application launching" - msgstr "Gestione finestre a avvio applicazioni" - -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "Collega la finestra modale a quella genitore" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "" -+"Questa chiave sovrascrive la chiave in org.gnome.mutter quando si esegue " -+"GNOME Shell." -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "" -+"Abilita il tiling di bordo quando si trascinano le finestre sui bordi dello " -+"schermo" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "Spazi di lavoro solo sul monitor primario" -+ - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" - msgstr "Solo la miniatura" -@@ -85,15 +107,15 @@ msgstr "Abilita ibernazione" - msgid "Control the visibility of the Hibernate menu item" - msgstr "Controlla la visibilità del comando Iberna" - --#: ../extensions/apps-menu/extension.js:37 -+#: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" - msgstr "Panoramica attività" - --#: ../extensions/apps-menu/extension.js:95 -+#: ../extensions/apps-menu/extension.js:113 - msgid "Favorites" - msgstr "Preferiti" - --#: ../extensions/apps-menu/extension.js:184 -+#: ../extensions/apps-menu/extension.js:278 - msgid "Applications" - msgstr "Applicazioni" - -@@ -249,10 +271,10 @@ msgstr "Quando raggruppare le finestre" - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 - msgid "" - "Decides when to group windows from the same application on the window list. " --"Possible values are \"never\" and \"always\"." -+"Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"Decide quando raggruppare le finestre della stessa applicazione sull'elenco " --"delle finestre. I possibile valori sono \"never\" e \"always\"." -+"Decide quando raggruppare le finestre della stessa applicazione sull'elenco. " -+"Valori possibili sono \"never\", \"auto\" e \"always\"." - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -263,6 +285,10 @@ msgid "Never group windows" - msgstr "Non raggruppare le finestre" - - #: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "Raggruppa le finestre quando lo spazio è limitato" -+ -+#: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" - msgstr "Raggruppare sempre le finestre" - -diff -up gnome-shell-extensions-3.8.4/po/ja.po.translations gnome-shell-extensions-3.8.4/po/ja.po ---- gnome-shell-extensions-3.8.4/po/ja.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/ja.po 2013-12-12 00:35:58.468258665 -0500 -@@ -3,20 +3,22 @@ - # This file is distributed under the same license as the gnome-shell-extensions package. - # Takeshi AIHANA , 2011. - # Jiro Matsuzawa , 2011, 2013 --# -+# Copyright (C) 2011-2013 gnome-shell-extensions's COPYRIGHT HOLDER -+# Nishio Futoshi , 2013. - msgid "" - msgstr "" --"Project-Id-Version: gnome-shell-extensions master\n" -+"Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2013-03-25 16:24+0900\n" --"PO-Revision-Date: 2013-03-25 17:06+0900\n" --"Last-Translator: Jiro Matsuzawa \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-06-22 10:15-0400\n" -+"Last-Translator: Nishio Futoshi \n" - "Language-Team: Japanese \n" --"Language: ja\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: ja\n" - "Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Zanata 3.1.2\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -35,6 +37,23 @@ msgstr "GNOME Shell クラシック" - msgid "Window management and application launching" - msgstr "ウィンドウ管理とアプリケーション起動" - -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "モーダルダイアログを親ウィンドウに結び付ける" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "GNOME Shell 使用時は、このキーが、org.gnome.mutter の同じキーよりも優先します。" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "ウィンドウを画面の端に移動させたときにタイル状に配置する" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "プライマリモニターのみワークスペースを切り替える" -+ - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" - msgstr "サムネイルのみ" -@@ -84,15 +103,15 @@ msgstr "ハイバーネートを有効� - msgid "Control the visibility of the Hibernate menu item" - msgstr "メニューアイテムとしてハイバーネートを表示します。" - --#: ../extensions/apps-menu/extension.js:37 -+#: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" - msgstr "アクティビティ" - --#: ../extensions/apps-menu/extension.js:95 -+#: ../extensions/apps-menu/extension.js:113 - msgid "Favorites" - msgstr "お気に入り" - --#: ../extensions/apps-menu/extension.js:184 -+#: ../extensions/apps-menu/extension.js:278 - msgid "Applications" - msgstr "アプリケーション" - -@@ -101,7 +120,9 @@ msgid "Application and workspace list" - msgstr "アプリケーションとワークスペースのリスト" - - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 --msgid "A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number" -+msgid "" -+"A list of strings, each containing an application id (desktop file name), " -+"followed by a colon and the workspace number" - msgstr "アプリケーションの識別子 (.desktop ファイル名) とコロンの後にワークスペース番号を付与した文字列を要素とするリストです" - - #: ../extensions/auto-move-windows/prefs.js:55 -@@ -115,28 +136,28 @@ msgstr "ワークスペース" - - #: ../extensions/auto-move-windows/prefs.js:80 - msgid "Add rule" --msgstr "" -+msgstr "ルールを追加" - - #: ../extensions/auto-move-windows/prefs.js:94 - msgid "Create new matching rule" --msgstr "" -+msgstr "新規ルールの作成" - - #: ../extensions/auto-move-windows/prefs.js:98 - msgid "Add" --msgstr "" -+msgstr "追加" - - #: ../extensions/drive-menu/extension.js:72 - #, c-format - msgid "Ejecting drive '%s' failed:" --msgstr "" -+msgstr "ドライブ '%s' の取り出しに失敗しました:" - - #: ../extensions/drive-menu/extension.js:89 - msgid "Removable devices" --msgstr "" -+msgstr "リムーバブルデバイス" - - #: ../extensions/drive-menu/extension.js:106 - msgid "Open File" --msgstr "" -+msgstr "ファイルを開く" - - #: ../extensions/example/extension.js:17 - msgid "Hello, world!" -@@ -144,39 +165,54 @@ msgstr "Hello, world!" - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 - msgid "Alternative greeting text." --msgstr "" -+msgstr "代わりの挨拶テキストです。" - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 --msgid "If not empty, it contains the text that will be shown when clicking on the panel." --msgstr "" -+msgid "" -+"If not empty, it contains the text that will be shown when clicking on the " -+"panel." -+msgstr "空でない場合、指定したテキストが、パネルをクリックした時に表示されます。" - - #. TRANSLATORS: Example is the name of the extension, should not be - #. translated - #: ../extensions/example/prefs.js:30 - msgid "" --"Example aims to show how to build well behaved extensions for the Shell and as such it has little functionality on its own.\n" -+"Example aims to show how to build well behaved extensions for the Shell and " -+"as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." - msgstr "" -+"Example は、うまく動作する GNOME Shell 拡張機能の構築方法を示すことを目的としています。それ自体の機能はほんとどありません。\n" -+"それでも、挨拶メッセージをカスタマイズすることはできます。" - - #: ../extensions/example/prefs.js:36 - msgid "Message:" --msgstr "" -+msgstr "メッセージ:" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 - msgid "Use more screen for windows" - msgstr "ウィンドウにたくさんの画面を使うかどうか" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 --msgid "Try to use more screen for placing window thumbnails by adapting to screen aspect ratio, and consolidating them further to reduce the bounding box. This setting applies only with the natural placement strategy." --msgstr "ウィンドウのサムネイルを複数配置する際に、画面のアスペクト比に合わせて、境界部分を減らすことにより、ウィンドウを統合することで、さらにたくさんの画面を使用できるようにするかどうかです。この設定は 'natural' の配置アルゴリズムを採用している場合にのみ適用されます。" -+msgid "" -+"Try to use more screen for placing window thumbnails by adapting to screen " -+"aspect ratio, and consolidating them further to reduce the bounding box. " -+"This setting applies only with the natural placement strategy." -+msgstr "" -+"ウィンドウのサムネイルを複数配置する際に、画面のアスペクト比に合わせて、境界部分を減らすことにより、ウィンドウを統合することで、さらにたくさんの画面を使用できるようにするかどうかです。この設定は " -+"'natural' の配置アルゴリズムを採用している場合にのみ適用されます。" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" - msgstr "ウィンドウのタイトルバーを上端に表示するかどうか" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 --msgid "If true, place window captions on top the respective thumbnail, overriding shell default of placing it at the bottom. Changing this setting requires restarting the shell to have any effect." --msgstr "TRUE にすると、ウィンドウのサムネイルの上端にそのウィンドウのタイトルバーを表示します (これは、サムネイルの下端にタイトルバーを表示する GNOME シェルのデフォルト値よりも優先されます)。この設定を適用する際は GNOME シェルを再起動してください。" -+msgid "" -+"If true, place window captions on top the respective thumbnail, overriding " -+"shell default of placing it at the bottom. Changing this setting requires " -+"restarting the shell to have any effect." -+msgstr "" -+"TRUE にすると、ウィンドウのサムネイルの上端にそのウィンドウのタイトルバーを表示します (これは、サムネイルの下端にタイトルバーを表示する " -+"GNOME シェルのデフォルト値よりも優先されます)。この設定を適用する際は GNOME シェルを再起動してください。" - - #: ../extensions/places-menu/extension.js:77 - msgid "Places" -@@ -218,11 +254,15 @@ msgstr "テーマの名前です (~/.the - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 - msgid "When to group windows" --msgstr "" -+msgstr "ウインドウをグループ化する条件" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 --msgid "Decides when to group windows from the same application on the window list. Possible values are \"never\" and \"always\"." -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" -+"ウィンドウ一覧にある同じアプリケーションをグループ化する条件を指定します。指定可能な値は、\"never\", \"auto\", \"always\" " -+"です。" - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -233,25 +273,29 @@ msgid "Never group windows" - msgstr "ウィンドウをグループ化しない" - - #: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "ウィンドウ一覧の幅が制限される時にグループ化する" -+ -+#: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" - msgstr "ウィンドウをグループ化する" - - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" --msgstr "" -+msgstr "ワークスペースインジケーター" - - #: ../extensions/workspace-indicator/prefs.js:141 - msgid "Workspace names:" --msgstr "" -+msgstr "ワークスペース名:" - - #: ../extensions/workspace-indicator/prefs.js:152 - msgid "Name" --msgstr "" -+msgstr "名前" - - #: ../extensions/workspace-indicator/prefs.js:186 - #, c-format - msgid "Workspace %d" --msgstr "" -+msgstr "ワークスペース %d" - - #: ../extensions/xrandr-indicator/extension.js:30 - msgid "Normal" -@@ -271,71 +315,8 @@ msgstr "逆さま" - - #: ../extensions/xrandr-indicator/extension.js:50 - msgid "Display" --msgstr "" -+msgstr "ディスプレイ" - - #: ../extensions/xrandr-indicator/extension.js:80 --#, fuzzy --#| msgid "System Settings" - msgid "Display Settings" --msgstr "システム設定" -- --#~ msgid "Notifications" --#~ msgstr "メッセージ通知" -- --#~ msgid "Online Accounts" --#~ msgstr "オンラインアカウント" -- --#~ msgid "Lock Screen" --#~ msgstr "画面のロック" -- --#~ msgid "Switch User" --#~ msgstr "ユーザーの切り替え" -- --#~ msgid "Log Out..." --#~ msgstr "ログアウト..." -- --#~ msgid "Drag here to add favorites" --#~ msgstr "ドラッグでお気に入りに追加" -- --#~ msgid "New Window" --#~ msgstr "新しいウィンドウで開く" -- --#~ msgid "Remove from Favorites" --#~ msgstr "お気に入りから削除" -- --#~ msgid "Icon size" --#~ msgstr "アイコンのサイズ" -- --#~ msgid "Position of the dock" --#~ msgstr "ドックの位置" -- --#~ msgid "Sets icon size of the dock." --#~ msgstr "ドックに表示するアイコンの大きさを指定します。" -- --#, fuzzy --#~ msgid "Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'" --#~ msgstr "ドックをデスクトップに表示する位置を指定します。指定可能な値: 'right'、'left'" -- --#~ msgid "Sets the position of the dock in the screen. Allowed values are 'right' or 'left'" --#~ msgstr "ドックをデスクトップに表示する位置を指定します。指定可能な値: 'right'、'left'" -- --#~ msgid "%s is away." --#~ msgstr "%s さんは離席中です。" -- --#~ msgid "%s is offline." --#~ msgstr "%s さんはオフラインです。" -- --#~ msgid "%s is online." --#~ msgstr "%s さんはオンラインです。" -- --#~ msgid "%s is busy." --#~ msgstr "%s さんは取り込み中です。" -- --#~ msgid "The algorithm used to layout thumbnails in the overview. 'grid' to use the default grid based algorithm, 'natural' to use another one that reflects more the position and size of the actual window" --#~ msgstr "オーバービュー・モードでウィンドウのサムネイルを配置する際のアルゴリズムです。指定可能な値: 'grid' (原則的に格子状に配置していくアルゴリズム)、'natural' (ウィンドウの実際の位置や大きさを考慮して配置していくアルゴリズム)" -- --#~ msgid "Window placement strategy" --#~ msgstr "ウィンドウを配置するアルゴリズム" -- --#~ msgid "Configure display settings..." --#~ msgstr "ディスプレイの設定..." -+msgstr "ディスプレイ設定" -diff -up gnome-shell-extensions-3.8.4/po/kn.po.translations gnome-shell-extensions-3.8.4/po/kn.po ---- gnome-shell-extensions-3.8.4/po/kn.po.translations 2013-12-12 00:35:58.468258665 -0500 -+++ gnome-shell-extensions-3.8.4/po/kn.po 2013-12-12 00:35:58.468258665 -0500 -@@ -0,0 +1,330 @@ -+# Shankar Prasad , 2013. -+msgid "" -+msgstr "" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-10-29 06:13-0400\n" -+"Last-Translator: Shankar Prasad \n" -+"Language-Team: Kannada \n" -+"MIME-Version: 1.0\n" -+"Content-Type: text/plain; charset=UTF-8\n" -+"Content-Transfer-Encoding: 8bit\n" -+"Language: kn\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n!=1)\n" -+ -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "GNOME ಕ್ಲಾಸಿಕ್" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "ಈ ಅಧಿವೇಶನವು ನಿಮ್ಮನ್ನು GNOME ಕ್ಲಾಸಿಕ್‌ಗೆ ಪ್ರವೇಶಿಸುವಂತೆ ಮಾಡುತ್ತದೆ" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "GNOME ಶೆಲ್‌ ಕ್ಲಾಸಿಕ್" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "ಕಿಟಕಿ ನಿರ್ವಹಣೆ ಹಾಗು ಅನ್ವಯವನ್ನು ಆರಂಭಿಸುವಿಕೆ" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "ಮೂಲ ಕಿಟಕಿಗೆ ಮೋಡಲ್ ಸಂವಾದವನ್ನು ಸೇರಿಸು" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "" -+"GNOME ಶೆಲ್‌ ಅನ್ನು ಚಲಾಯಿಸುವಾಗ ಈ ಕೀಲಿಯು org.gnome.mutter ಯಲ್ಲಿನ ಕೀಲಿಯನ್ನು " -+"ಅತಿಕ್ರಮಿಸುತ್ತದೆ." -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "" -+"ತೆರೆಯ ಅಂಚುಗಳಲ್ಲಿ ಕಿಟಕಿಗಳನ್ನು ಬೀಳಿಸುವಾಗ ಅಂಚಿನ ಟೈಲಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "ಪ್ರಾಥಮಿಕ ತೆರೆಯಲ್ಲಿ ಇರುವ ಕಾರ್ಯಕ್ಷೇತ್ರಗಳು ಮಾತ್ರ" -+ -+#: ../extensions/alternate-tab/prefs.js:20 -+msgid "Thumbnail only" -+msgstr "ಅಡಕಚಿತ್ರ ಮಾತ್ರ" -+ -+#: ../extensions/alternate-tab/prefs.js:21 -+msgid "Application icon only" -+msgstr "ಅನ್ವಯ ಚಿಹ್ನೆ ಮಾತ್ರ" -+ -+#: ../extensions/alternate-tab/prefs.js:22 -+msgid "Thumbnail and application icon" -+msgstr "ಅಡಕಚಿತ್ರ ಮತ್ತು ಅನ್ವಯ ಚಿಹ್ನೆ" -+ -+#: ../extensions/alternate-tab/prefs.js:37 -+msgid "Present windows as" -+msgstr "ಈ ರೀತಿಯಲ್ಲಿ ಈಗಿರುವ ಕಿಟಕಿ" -+ -+#: ../extensions/alternate-tab/prefs.js:62 -+msgid "Show only windows in the current workspace" -+msgstr "ಪ್ರಸಕ್ತ ಕಾರ್ಯಕ್ಷೇತ್ರದಲ್ಲಿರುವ ಕಿಟಕಿಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು" -+ -+#. add the new entries -+#: ../extensions/alternative-status-menu/extension.js:125 -+msgid "Suspend" -+msgstr "ಅಮಾನತುಗೊಳಿಸು" -+ -+#: ../extensions/alternative-status-menu/extension.js:128 -+msgid "Hibernate" -+msgstr "ನೆನಪಿನೊಡನೆ ಮುಚ್ಚು" -+ -+#: ../extensions/alternative-status-menu/extension.js:131 -+msgid "Power Off" -+msgstr "ಸ್ಥಗಿತಗೊಳಿಸು (ಪವರ್-ಆಫ್)" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 -+msgid "Enable suspending" -+msgstr "ಅಮಾನತುಗೊಳಿಸುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 -+msgid "Control the visibility of the Suspend menu item" -+msgstr "ಅಮಾನತುಗೊಳಿಸು ಪರಿವಿಡಿ ಅಂಶದ ಗೋಚರಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸು" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 -+msgid "Enable hibernating" -+msgstr "ನೆನಪಿನೊಡನೆ ಮುಚ್ಚುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 -+msgid "Control the visibility of the Hibernate menu item" -+msgstr "ನೆನಪಿನೊಡನೆ ಮುಚ್ಚು ಪರಿವಿಡಿ ಅಂಶದ ಗೋಚರಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸು" -+ -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "ಚಟುವಟಿಕೆ ಅವಲೋಕನ" -+ -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "ನೆಚ್ಚಿನವು" -+ -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "ಅನ್ವಯಗಳು" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 -+msgid "Application and workspace list" -+msgstr "ಅನ್ವಯ ಮತ್ತು ಕಾರ್ಯಕ್ಷೇತ್ರದ ಪಟ್ಟಿ" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 -+msgid "" -+"A list of strings, each containing an application id (desktop file name), " -+"followed by a colon and the workspace number" -+msgstr "" -+"ಅನ್ವಯ id (ಗಣಕತೆರೆ ಕಡತದ ಹೆಸರು), ನಂತರ ಒಂದು ವಿವರಣೆ ಚಿಹ್ನೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷೇತ್ರದ " -+"ಸಂಖ್ಯೆಯನ್ನು ಹೊಂದಿರುವ ವಾಕ್ಯಾಂಶಗಳ ಒಂದು ಪಟ್ಟಿ" -+ -+#: ../extensions/auto-move-windows/prefs.js:55 -+msgid "Application" -+msgstr "ಅನ್ವಯ" -+ -+#: ../extensions/auto-move-windows/prefs.js:64 -+#: ../extensions/auto-move-windows/prefs.js:106 -+msgid "Workspace" -+msgstr "ಕಾರ್ಯಕ್ಷೇತ್ರ" -+ -+#: ../extensions/auto-move-windows/prefs.js:80 -+msgid "Add rule" -+msgstr "ನಿಯಮವನ್ನು ಸೇರಿಸು" -+ -+#: ../extensions/auto-move-windows/prefs.js:94 -+msgid "Create new matching rule" -+msgstr "ಹೊಸ ಹೊಂದಿಕೆಯಾಗುವ ನಿಯಮವನ್ನು ರಚಿಸು" -+ -+#: ../extensions/auto-move-windows/prefs.js:98 -+msgid "Add" -+msgstr "ಸೇರಿಸು" -+ -+#: ../extensions/drive-menu/extension.js:72 -+#, c-format -+msgid "Ejecting drive '%s' failed:" -+msgstr "'%s' ಡ್ರೈವ್ ಅನ್ನು ಹೊರತೆಗೆಯುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ:" -+ -+#: ../extensions/drive-menu/extension.js:89 -+msgid "Removable devices" -+msgstr "ತೆಗೆಯಬಹುದಾದ ಸಾಧನಗಳು" -+ -+#: ../extensions/drive-menu/extension.js:106 -+msgid "Open File" -+msgstr "ಕಡತವನ್ನು ತೆರೆ" -+ -+#: ../extensions/example/extension.js:17 -+msgid "Hello, world!" -+msgstr "ನಮಸ್ಕಾರ, ಎಲ್ಲರಿಗೂ!" -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 -+msgid "Alternative greeting text." -+msgstr "ಪರ್ಯಾಯ ಶುಭಾಶಯ ಪಠ್ಯ." -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 -+msgid "" -+"If not empty, it contains the text that will be shown when clicking on the " -+"panel." -+msgstr "" -+"ಖಾಲಿ ಇರದೆ ಇದ್ದಲ್ಲಿ, ಪ್ಯಾನೆಲ್‌ನ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ತೋರಿಸಲಾಗುವ ಪಠ್ಯವನ್ನು ಇದು " -+"ಹೊಂದಿರುತ್ತದೆ." -+ -+#. TRANSLATORS: Example is the name of the extension, should not be -+#. translated -+#: ../extensions/example/prefs.js:30 -+msgid "" -+"Example aims to show how to build well behaved extensions for the Shell and " -+"as such it has little functionality on its own.\n" -+"Nevertheless it's possible to customize the greeting message." -+msgstr "" -+"ಉದಾಹರಣೆಯು ಶೆಲ್‌ಗಾಗಿ ಉತ್ತಮವಾಗಿ ವರ್ತಿಸುವ ವಿಸ್ತರಣೆಗಳನ್ನು ನಿರ್ಮಿಸುವುದನ್ನು " -+"ತೋರಿಸುವ ಉದ್ಧೇಶವನ್ನು ಹೊಂದಿರುತ್ತದೆ ಮತ್ತು ಅದು ತಾನೆ ಸ್ವತಃ ಬಹಳ ಕಡಿಮೆ ಎನ್ನುವಷ್ಟು " -+"ಪ್ರಯೋಜನವನ್ನು ನೀಡಬಲ್ಲದು.\n" -+"ಆದರೂ ಸಹ ಶುಭಾಶಯದ ಸಂದೇಶವನ್ನು ಅಗತ್ಯಾನುಗಣವಾಗಿಸಲು ಸಾಧ್ಯವಿರುತ್ತದೆ." -+ -+#: ../extensions/example/prefs.js:36 -+msgid "Message:" -+msgstr "ಸಂದೇಶ:" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 -+msgid "Use more screen for windows" -+msgstr "ಕಿಟಕಿಗಳಿಗಾಗಿ ಹೆಚ್ಚಿನ ತೆರೆಯನ್ನು ಬಳಸಿ" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 -+msgid "" -+"Try to use more screen for placing window thumbnails by adapting to screen " -+"aspect ratio, and consolidating them further to reduce the bounding box. " -+"This setting applies only with the natural placement strategy." -+msgstr "" -+"ತೆರೆಯ ಆಕಾರ ಅನುಪಾತವನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ ಕಿಟಕಿ ಅಡಕಚಿತ್ರಗಳನ್ನು (ತಂಬ್‌ನೈಲ್) " -+"ಇರಿಸುವ ಸಲುವಾಗಿ ಹೆಚ್ಚಿನ ತೆರೆಯನ್ನು ಬಳಸಲು, ಮತ್ತು ಸೀಮಿತ ಚೌಕವನ್ನು (ಬೌಂಡಿಂಗ್ " -+"ಬಾಕ್ಸ್) ಕಡಿಮೆ ಮಾಡಲು ಅವುಗಳನ್ನು ಇನ್ನಷ್ಟು ಕ್ರೋಢೀಕರಿಸಲು ಪ್ರಯತ್ನಿಸಿ. ಈ ಸಿದ್ಧತೆಯು " -+"ಕೇವಲ ನೈಸರ್ಗಿಕ ಇರಿಸುವಿಕೆ ತಂತ್ರದೊಂದಿಗೆ ಮಾತ್ರ ಕೆಲಸ ಮಾಡುತ್ತದೆ." -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 -+msgid "Place window captions on top" -+msgstr "ಕಿಟಕಿಯ ಶೀರ್ಷಿಕೆಗಳನ್ನು ಮೇಲ್ಭಾಗದಲ್ಲಿ ಇರಿಸು" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 -+msgid "" -+"If true, place window captions on top the respective thumbnail, overriding " -+"shell default of placing it at the bottom. Changing this setting requires " -+"restarting the shell to have any effect." -+msgstr "" -+"ನಿಜವಾದಲ್ಲಿ, ಆಯಾಯ ಅಡಕಚಿತ್ರದ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಕಿಟಕಿ ಶೀರ್ಷಿಕೆಗಳನ್ನು ಇರಿಸಿ, ಆ ಮೂಲಕ " -+"ಶೆಲ್‌ನ ಪೂರ್ವನಿಯೋಜಿತವಾದಂತಹ ಕೆಳಭಾಗದಲ್ಲಿ ಇರಿಸುವಿಕೆಯನ್ನು ಅತಿಕ್ರಮಿಸಿದಂತಾಗುತ್ತದೆ. " -+"ಈ ಸಿದ್ಧತೆಯನ್ನು ಬದಲಾಯಿಸಿದಲ್ಲಿ ಅದು ಕಾರ್ಯರೂಪಕ್ಕೆ ಬರಲು ಶೆಲ್ ಅನ್ನು ಮರಳಿ ಆರಂಭಿಸುವ " -+"ಅಗತ್ಯವಿರುತ್ತದೆ." -+ -+#: ../extensions/places-menu/extension.js:77 -+msgid "Places" -+msgstr "ಸ್ಥಳಗಳು" -+ -+#: ../extensions/places-menu/placeDisplay.js:56 -+#, c-format -+msgid "Failed to launch \"%s\"" -+msgstr "'%s' ಅನ್ನು ಆರಂಭಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ" -+ -+#: ../extensions/places-menu/placeDisplay.js:98 -+#: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "ಗಣಕ" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "ನೆಲೆ" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "ಜಾಲಬಂಧವನ್ನು ವೀಕ್ಷಿಸು" -+ -+#: ../extensions/systemMonitor/extension.js:213 -+msgid "CPU" -+msgstr "CPU" -+ -+#: ../extensions/systemMonitor/extension.js:266 -+msgid "Memory" -+msgstr "ಮೆಮೊರಿ" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 -+msgid "Theme name" -+msgstr "ಪರಿಸರವಿನ್ಯಾಸದ ಹೆಸರು" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 -+msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -+msgstr "~/.themes/name/gnome-shell ಇಂದ ಲೋಡ್ ಮಾಡಬೇಕಿರುವ ಪರಿಸರವಿನ್ಯಾಸದ ಹೆಸರು" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "ಕಿಟಕಿಗಳನ್ನು ಯಾವಾಗ ಗುಂಪುಗೂಡಿಸಬೇಕು" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"ಕಿಟಕಿಯ ಪಟ್ಟಿಯಲ್ಲಿ ಒಂದೇ ಅನ್ವಯಗಳ ಕಿಟಕಿಗಳನ್ನು ಯಾವಾಗ ಗುಂಪುಗೂಡಿಸಬೇಕು ಎನ್ನುವುದನ್ನು " -+"ಇದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಸಾಧ್ಯವಿರುವ ಮೌಲ್ಯಗಳೆಂದರೆ, \"never\", \"auto\" ಮತ್ತು " -+"\"always\"" -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "ಕಿಟಕಿ ಗುಂಪು ಮಾಡುವಿಕೆ" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "ಎಂದಿಗೂ ಕಿಟಕಿಗಳನ್ನು ಗುಂಪುಗೂಡಿಸದಿರು" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "ಸ್ಥಳದ ಮಿತಿ ಇದ್ದಾಗ ಕಿಟಕಿಗಳನ್ನು ಗುಂಪುಗೂಡಿಸು" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "ಯಾವಾಗಲೂ ಕಿಟಕಿಗಳನ್ನು ಗುಂಪುಗೂಡಿಸು" -+ -+#: ../extensions/workspace-indicator/extension.js:30 -+msgid "Workspace Indicator" -+msgstr "ಕಾರ್ಯಸ್ಥಳದ ಸೂಚಕ" -+ -+#: ../extensions/workspace-indicator/prefs.js:141 -+msgid "Workspace names:" -+msgstr "ಕಾರ್ಯಸ್ಥಳದ ಹೆಸರುಗಳು:" -+ -+#: ../extensions/workspace-indicator/prefs.js:152 -+msgid "Name" -+msgstr "ಹೆಸರು" -+ -+#: ../extensions/workspace-indicator/prefs.js:186 -+#, c-format -+msgid "Workspace %d" -+msgstr "ಕಾರ್ಯಕ್ಷೇತ್ರ %d" -+ -+#: ../extensions/xrandr-indicator/extension.js:30 -+msgid "Normal" -+msgstr "ಸಾಮಾನ್ಯ" -+ -+#: ../extensions/xrandr-indicator/extension.js:31 -+msgid "Left" -+msgstr "ಎಡ" -+ -+#: ../extensions/xrandr-indicator/extension.js:32 -+msgid "Right" -+msgstr "ಬಲ" -+ -+#: ../extensions/xrandr-indicator/extension.js:33 -+msgid "Upside-down" -+msgstr "ತಲೆಕೆಳಗೆ" -+ -+#: ../extensions/xrandr-indicator/extension.js:50 -+msgid "Display" -+msgstr "ಪ್ರದರ್ಶಕ" -+ -+#: ../extensions/xrandr-indicator/extension.js:80 -+msgid "Display Settings" -+msgstr "ಪ್ರದರ್ಶಕದ ಸಿದ್ಧತೆಗಳು" -diff -up gnome-shell-extensions-3.8.4/po/ko.po.translations gnome-shell-extensions-3.8.4/po/ko.po ---- gnome-shell-extensions-3.8.4/po/ko.po.translations 2013-07-16 07:12:50.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/ko.po 2013-12-12 00:35:58.468258665 -0500 -@@ -1,23 +1,25 @@ - # Korean translation for gnome-shell-extensions. - # Copyright (C) 2012 gnome-shell-extensions's COPYRIGHT HOLDER - # This file is distributed under the same license as the gnome-shell-extensions package. --# -+# - # Seong-ho Cho , 2012. - # Changwoo Ryu , 2013. --# -+# eukim , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions\n" --"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=extensions\n" -+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" -+"shell&keywords=I18N+L10N&component=extensions\n" - "POT-Creation-Date: 2013-02-08 12:25+0000\n" --"PO-Revision-Date: 2013-03-28 02:57+0900\n" --"Last-Translator: Changwoo Ryu \n" -+"PO-Revision-Date: 2013-09-23 08:53-0400\n" -+"Last-Translator: eukim \n" - "Language-Team: Korean \n" --"Language: ko\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: ko\n" - "Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Zanata 3.1.2\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -36,6 +38,23 @@ msgstr "그놈 셸 클래식" - msgid "Window management and application launching" - msgstr "창 관리 및 프로그램 실행" - -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "상위 창에 모달 대화창 붙이기" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "그놈 셸을 실행할 때 org.gnome.mutter의 키 대신 사용됩니다." -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "화면 가장자리에 창을 놓을 때 가장자리에 맞춥니다" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "주 모니터에서만 작업 공간 사용" -+ - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" - msgstr "섬네일만" -@@ -57,15 +76,15 @@ msgid "Show only windows in the current - msgstr "현재 작업 공간의 창만 표시합니다" - - #. add the new entries --#: ../extensions/alternative-status-menu/extension.js:144 -+#: ../extensions/alternative-status-menu/extension.js:125 - msgid "Suspend" - msgstr "대기 모드" - --#: ../extensions/alternative-status-menu/extension.js:147 -+#: ../extensions/alternative-status-menu/extension.js:128 - msgid "Hibernate" - msgstr "최대 절전" - --#: ../extensions/alternative-status-menu/extension.js:150 -+#: ../extensions/alternative-status-menu/extension.js:131 - msgid "Power Off" - msgstr "전원 끄기" - -@@ -85,15 +104,15 @@ msgstr "최대 절전 사용" - msgid "Control the visibility of the Hibernate menu item" - msgstr "최대 절전 메뉴를 보일지 정합니다" - --#: ../extensions/apps-menu/extension.js:50 -+#: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" - msgstr "현재 활동" - --#: ../extensions/apps-menu/extension.js:103 -+#: ../extensions/apps-menu/extension.js:113 - msgid "Favorites" - msgstr "즐겨찾기" - --#: ../extensions/apps-menu/extension.js:197 -+#: ../extensions/apps-menu/extension.js:278 - msgid "Applications" - msgstr "프로그램" - -@@ -163,8 +182,7 @@ msgid "" - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." - msgstr "" --"Example은 쉘에 대해 잘 갖춰진 확장을 어떻게 만드는지 보여주기 위한 것이며, 자" --"체적으로 약간의 기능을 가지고 있습니다. \n" -+"Example은 쉘에 대해 잘 갖춰진 확장을 어떻게 만드는지 보여주기 위한 것이며, 자체적으로 약간의 기능을 가지고 있습니다. \n" - "그럼에도 불구하고 인사 메시지를 사용자가 원하는대로 정할 수 있습니다." - - #: ../extensions/example/prefs.js:36 -@@ -181,7 +199,9 @@ msgid "" - "Try to use more screen for placing window thumbnails by adapting to screen " - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." --msgstr "창의 섬네일을 표시할 때 더 많은 화면을 사용합니다. 섬네일을 화면 종횡비에 맞추고 섬네일을 통합해 차지하는 크기를 줄입니다. 이 설정은 자동 배치 방식에서만 적용됩니다." -+msgstr "" -+"창의 섬네일을 표시할 때 더 많은 화면을 사용합니다. 섬네일을 화면 종횡비에 맞추고 섬네일을 통합해 차지하는 크기를 줄입니다. 이 설정은 " -+"자동 배치 방식에서만 적용됩니다." - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" -@@ -192,26 +212,29 @@ msgid "" - "If true, place window captions on top the respective thumbnail, overriding " - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." --msgstr "참이면, 창의 이름을 각 섬네일 위에 표시합니다. 셸의 기본값은 아래에 창 이름을 표시합니다. 이 설정을 바꾸면 셸을 다시 시작해야 적용됩니다." -+msgstr "" -+"참이면, 창의 이름을 각 섬네일 위에 표시합니다. 셸의 기본값은 아래에 창 이름을 표시합니다. 이 설정을 바꾸면 셸을 다시 시작해야 " -+"적용됩니다." - --#: ../extensions/places-menu/extension.js:57 -+#: ../extensions/places-menu/extension.js:77 - msgid "Places" - msgstr "위치" - --#: ../extensions/places-menu/placeDisplay.js:48 -+#: ../extensions/places-menu/placeDisplay.js:56 - #, c-format - msgid "Failed to launch \"%s\"" - msgstr "\"%s\" 실행에 실패했습니다" - -+#: ../extensions/places-menu/placeDisplay.js:98 - #: ../extensions/places-menu/placeDisplay.js:121 --msgid "Home" --msgstr "홈" -- --#: ../extensions/places-menu/placeDisplay.js:195 - msgid "Computer" - msgstr "컴퓨터" - - #: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "홈" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 - msgid "Browse Network" - msgstr "네트워크 찾아보기" - -@@ -238,8 +261,10 @@ msgstr "창 모으기 조건" - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 - msgid "" - "Decides when to group windows from the same application on the window list. " --"Possible values are \"never\" and \"always\"." --msgstr "창 목록에서 같은 프로그램의 창을 언제 모을지 결정합니다. 가능한 값은 \"never\" 및 \"always\"입니다." -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"창 목록에서 동일한 응용 프로그램에서 창을 모으기할 때를 지정합니다. 가능한 값은 \"창을 모으지 않기\", \"자동 모으기\", " -+"\"항상 창 모으기\"입니다." - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -250,6 +275,10 @@ msgid "Never group windows" - msgstr "창을 모으지 않기" - - #: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "공간이 제한되어 있을 때 창 모으기 " -+ -+#: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" - msgstr "항상 창 모으기" - -diff -up gnome-shell-extensions-3.8.4/po/ml.po.translations gnome-shell-extensions-3.8.4/po/ml.po ---- gnome-shell-extensions-3.8.4/po/ml.po.translations 2013-12-12 00:35:58.469258662 -0500 -+++ gnome-shell-extensions-3.8.4/po/ml.po 2013-12-12 00:35:58.469258662 -0500 -@@ -0,0 +1,338 @@ -+# apeter , 2013. #zanata -+msgid "" -+msgstr "" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-10-29 07:07-0400\n" -+"Last-Translator: apeter \n" -+"Language-Team: Malayalam\n" -+"MIME-Version: 1.0\n" -+"Content-Type: text/plain; charset=UTF-8\n" -+"Content-Transfer-Encoding: 8bit\n" -+"Language: ml\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n != 1)\n" -+ -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "ഗ്നോം ക്ലാസ്സിക്ക്" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "ഈ സെഷന്‍ നിങ്ങളെ ഗ്നോം ക്ലാസ്സിക്കിലേക്കു് പ്രവേശിപ്പിയ്ക്കുന്നു" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "ഗ്നോം ഷെല്‍ ക്ലാസ്സിക്ക്" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "വിന്‍ഡോ കൈകാര്യം ചെയ്യലും പ്രയോഗം ലഭ്യമാക്കലും" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "പേരന്റ് ജാലകത്തിലേക്കു് ഡയലോഗ് ചേര്‍ക്കുക" -+ -+# auto translated by TM merge from project: gnome-shell, version: 3.8.4, DocId: gnome-shell -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "" -+"ഗ്നോം ഷെല്‍ പ്രവര്‍ത്തിയ്ക്കുമ്പോള്‍ org.gnome.mutter-ലുള്ള കീ ഈ കീ " -+"തിരുത്തിയെഴുതുന്നു" -+ -+# auto translated by TM merge from project: gnome-shell, version: 3.8.4, DocId: gnome-shell -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "" -+"സ്ക്രീന്‍ കോണുകളില്‍ ജാലകങ്ങള്‍ എത്തിയ്ക്കുമ്പോള്‍ കോണ്‍ ചരിയ്ക്കുന്നതിനായി " -+"പ്രവര്‍ത്തന സജ്ജമാക്കുക." -+ -+# auto translated by TM merge from project: gnome-shell, version: 3.8.4, DocId: gnome-shell -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "പ്രധാന മോണിറ്ററില്‍ മാത്രം പണിയിടങ്ങള്‍ " -+ -+#: ../extensions/alternate-tab/prefs.js:20 -+msgid "Thumbnail only" -+msgstr "നഖചിത്രം മാത്രം" -+ -+#: ../extensions/alternate-tab/prefs.js:21 -+msgid "Application icon only" -+msgstr "പ്രയോഗത്തിന്റെ പ്രതിരൂപം മാത്രം" -+ -+#: ../extensions/alternate-tab/prefs.js:22 -+msgid "Thumbnail and application icon" -+msgstr "നഖചിത്രവും പ്രയോഗത്തിന്റെ പ്രതിരൂപവും മാത്രം" -+ -+#: ../extensions/alternate-tab/prefs.js:37 -+msgid "Present windows as" -+msgstr "ജാലകങ്ങള്‍ ഇങ്ങനെ അവതരിപ്പിയ്ക്കുക" -+ -+#: ../extensions/alternate-tab/prefs.js:62 -+msgid "Show only windows in the current workspace" -+msgstr "നിലവിലുള്ള വര്‍ക്ക്സ്പെയിസിലുള്ള ജാലകങ്ങള്‍ മാത്രം കാണിയ്ക്കുക" -+ -+# auto translated by TM merge from project: gdm, version: 3.8.4, DocId: gdm -+#. add the new entries -+#: ../extensions/alternative-status-menu/extension.js:125 -+msgid "Suspend" -+msgstr "മയങ്ങുക " -+ -+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0 -+#: ../extensions/alternative-status-menu/extension.js:128 -+msgid "Hibernate" -+msgstr "ശിശിരനിദ്രയിലാക്കുക " -+ -+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0 -+#: ../extensions/alternative-status-menu/extension.js:131 -+msgid "Power Off" -+msgstr "നിര്‍ത്തി വെയ്ക്കുക " -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 -+msgid "Enable suspending" -+msgstr "മയങ്ങുന്നതു് പ്രവര്‍ത്തന സജ്ജമാക്കുക" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 -+msgid "Control the visibility of the Suspend menu item" -+msgstr "മയങ്ങുന്ന മെനു വസ്തുവിന്റെ കാഴ്ചയുടെ നിയന്ത്രണം" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 -+msgid "Enable hibernating" -+msgstr "ഹൈബര്‍നേറ്റിങ് പ്രവര്‍ത്തന സജ്ജമാക്കുക" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 -+msgid "Control the visibility of the Hibernate menu item" -+msgstr "ഹൈബര്‍നേറ്റ് മെനു വസ്തുവിന്റെ കാഴ്ചയുടെ നിയന്ത്രണം" -+ -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "പ്രവര്‍ത്തനങ്ങളുടെ അവലോകനം" -+ -+# auto translated by TM merge from project: system-config-printer, version: 1.1.16-23, DocId: system-config-printer -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "ഇഷ്ടമുള്ളവ " -+ -+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0 -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "പ്രയോഗങ്ങള്‍ " -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 -+msgid "Application and workspace list" -+msgstr "പ്രയോഗവും പണിയറ പട്ടികയും" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 -+msgid "" -+"A list of strings, each containing an application id (desktop file name), " -+"followed by a colon and the workspace number" -+msgstr "" -+"സ്ടിങുകളുടെ കൂട്ടം, ഓരോന്നിലും ഒരു ആപ്ലിക്കേഷന്‍ ഐഡി (പണിയിട ഫയലിന്റെ " -+"പേരു്), ശേഷം ഒരു കോളനും വര്‍ക്ക്സ്പെയിസ് നംബറും" -+ -+#: ../extensions/auto-move-windows/prefs.js:55 -+msgid "Application" -+msgstr "പ്രയോഗം" -+ -+#: ../extensions/auto-move-windows/prefs.js:64 -+#: ../extensions/auto-move-windows/prefs.js:106 -+msgid "Workspace" -+msgstr "പണിയറ" -+ -+#: ../extensions/auto-move-windows/prefs.js:80 -+msgid "Add rule" -+msgstr "നിയമം ചേര്‍ക്കുക" -+ -+#: ../extensions/auto-move-windows/prefs.js:94 -+msgid "Create new matching rule" -+msgstr "പൊരുത്തമുള്ള പുതിയ നിയമം തയ്യാറാക്കുക" -+ -+#: ../extensions/auto-move-windows/prefs.js:98 -+msgid "Add" -+msgstr "ചേര്‍ക്കുക" -+ -+#: ../extensions/drive-menu/extension.js:72 -+#, c-format -+msgid "Ejecting drive '%s' failed:" -+msgstr "'%s' ഡ്രൈവ് പുറത്തെടുക്കുന്നതു് പരാജയപ്പെട്ടു:" -+ -+#: ../extensions/drive-menu/extension.js:89 -+msgid "Removable devices" -+msgstr "നീക്കം ചെയ്യുവാന്‍ സാധിയ്ക്കുന്ന ഡിവൈസുകള്‍" -+ -+#: ../extensions/drive-menu/extension.js:106 -+msgid "Open File" -+msgstr "ഫയല്‍ തുറക്കുക" -+ -+#: ../extensions/example/extension.js:17 -+msgid "Hello, world!" -+msgstr "നമസ്ക്കാരം!" -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 -+msgid "Alternative greeting text." -+msgstr "മറ്റൊരു വന്ദന വാചകം." -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 -+msgid "" -+"If not empty, it contains the text that will be shown when clicking on the " -+"panel." -+msgstr "" -+"കാലിയല്ലെങ്കില്‍, പാനലില്‍ ക്ലിക്ക് ചെയ്യുമ്പോള്‍ കാണിയ്ക്കേണ്ട വാചകം " -+"ഇതിലടങ്ങുന്നു." -+ -+#. TRANSLATORS: Example is the name of the extension, should not be -+#. translated -+#: ../extensions/example/prefs.js:30 -+msgid "" -+"Example aims to show how to build well behaved extensions for the Shell and " -+"as such it has little functionality on its own.\n" -+"Nevertheless it's possible to customize the greeting message." -+msgstr "" -+"ഷെല്ലിനുചിതമായ എക്സ്റ്റന്‍ഷനുകള്‍ എങ്ങനെ തയ്യാറാക്കണമെന്നും സ്വന്തമായി അധികം " -+"വിശേഷതയില്ലെന്നും ഈ ഉദാഹരണം കാണിയ്ക്കുന്നു.\n" -+"എന്നിരുന്നാലും, നിങ്ങള്‍ക്കു് സ്വാഗത സന്ദേശം ഉചിതമായി മാറ്റാം." -+ -+#: ../extensions/example/prefs.js:36 -+msgid "Message:" -+msgstr "സന്ദേശം:" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 -+msgid "Use more screen for windows" -+msgstr "ജാലകങ്ങള്‍ക്കു് കൂടുതല്‍ സ്ക്രീന്‍ ഉപയോഗിയ്ക്കുക" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 -+msgid "" -+"Try to use more screen for placing window thumbnails by adapting to screen " -+"aspect ratio, and consolidating them further to reduce the bounding box. " -+"This setting applies only with the natural placement strategy." -+msgstr "" -+"സ്ക്രീന്‍ ആസ്പക്ട് റേഷ്യോ ലഭ്യമാക്കി ജാലകത്തിനുള്ള നഖചിത്രം " -+"സ്ഥാപിയ്ക്കുന്നതിനു് കൂടുതല്‍ സ്ക്രീന്‍ ഉപയോഗിയ്ക്കുവാന്‍ ശ്രമിയ്ക്കുക. " -+"സാധാരണയുള്ള രീതികൊണ്ടു് മാത്രമേ ഈ സജ്ജീകരണം സജ്ജമാക്കൂ." -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 -+msgid "Place window captions on top" -+msgstr "ജാലകങ്ങള്‍ക്കുള്ള തലക്കെട്ട് മുകളില്‍ സ്ഥാപിയ്ക്കുക" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 -+msgid "" -+"If true, place window captions on top the respective thumbnail, overriding " -+"shell default of placing it at the bottom. Changing this setting requires " -+"restarting the shell to have any effect." -+msgstr "" -+"true എങ്കില്‍, അതതു് നഖചിത്രത്തിനു് മുകളില്‍ ജാലകത്തിന്റെ തലക്കെട്ടുകള്‍ " -+"സ്ഥാപിയ്ക്കുക, ഇതു് ഷെല്ലിന്റെ സ്വതവേയുള്ള താഴെ പറയുന്ന രീതി " -+"മാറ്റിയെഴുതുന്നു. ഈ സജ്ജീകരണം മാറ്റുന്നതിനു്, ഷെല്‍ വീണ്ടും " -+"ആരംഭിയ്ക്കേണ്ടതുണ്ടു്." -+ -+#: ../extensions/places-menu/extension.js:77 -+msgid "Places" -+msgstr "സ്ഥലങ്ങള്‍" -+ -+#: ../extensions/places-menu/placeDisplay.js:56 -+#, c-format -+msgid "Failed to launch \"%s\"" -+msgstr "\"%s\" ലഭ്യമാക്കുന്നതില്‍ പരാജയപ്പെട്ടു" -+ -+#: ../extensions/places-menu/placeDisplay.js:98 -+#: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "കമ്പ്യൂട്ടര്‍" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "ആസ്ഥാനം" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "നെറ്റ്‌വര്‍ക്ക് തുറക്കുക" -+ -+#: ../extensions/systemMonitor/extension.js:213 -+msgid "CPU" -+msgstr "സിപിയു" -+ -+#: ../extensions/systemMonitor/extension.js:266 -+msgid "Memory" -+msgstr "മെമ്മറി" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 -+msgid "Theme name" -+msgstr "പ്രമേയത്തിന്റെ പേരു്" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 -+msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -+msgstr "" -+"~/.themes/name/gnome-shell-ല്‍ നിന്നും ലഭ്യമാക്കേണ്ട പ്രമേയത്തിന്റെ പേരു്" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "ജാലകങ്ങള്‍ എങ്ങനെ ഗ്രൂപ്പ് ചെയ്യണം" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"ജാലക പട്ടികയില്‍ ഓരേ പ്രയോഗത്തില്‍ നിന്നും ജാലകം എപ്പോള്‍ ഗ്രൂപ്പ് " -+"ചെയ്യണമെന്നു് നിശ്ചയിയ്ക്കുന്നു. സാധ്യമായ മൂല്ല്യങ്ങള്‍ \"never\", \"auto\", " -+"\"always\" എന്നിവയാണു്." -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "ജാലകം ഗ്രൂപ്പിലാക്കുക" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "ജാലകങ്ങള്‍ ഒരിക്കലും ഗ്രൂപ്പ് ചെയ്യരുതു്" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "സ്ഥലപരിമിതിയുള്ളപ്പോള്‍ ജാലകങ്ങള്‍ ഗ്രൂപ്പിലാക്കുക" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "എപ്പോഴും ജാലകങ്ങള്‍ ഗ്രൂപ്പ് ചെയ്യുക" -+ -+#: ../extensions/workspace-indicator/extension.js:30 -+msgid "Workspace Indicator" -+msgstr "പണിയറ സൂചിക" -+ -+#: ../extensions/workspace-indicator/prefs.js:141 -+msgid "Workspace names:" -+msgstr "പണിയറയുടെ പേരുകള്‍:" -+ -+#: ../extensions/workspace-indicator/prefs.js:152 -+msgid "Name" -+msgstr "പേരു്" -+ -+#: ../extensions/workspace-indicator/prefs.js:186 -+#, c-format -+msgid "Workspace %d" -+msgstr "പണിയറ %d" -+ -+#: ../extensions/xrandr-indicator/extension.js:30 -+msgid "Normal" -+msgstr "സാധാരണ" -+ -+#: ../extensions/xrandr-indicator/extension.js:31 -+msgid "Left" -+msgstr "ഇടതു്" -+ -+#: ../extensions/xrandr-indicator/extension.js:32 -+msgid "Right" -+msgstr "വലതു്" -+ -+#: ../extensions/xrandr-indicator/extension.js:33 -+msgid "Upside-down" -+msgstr "മുകളില്‍ നിന്നും താഴോട്ടു്" -+ -+#: ../extensions/xrandr-indicator/extension.js:50 -+msgid "Display" -+msgstr "പ്രദര്‍ശനം" -+ -+#: ../extensions/xrandr-indicator/extension.js:80 -+msgid "Display Settings" -+msgstr "പ്രദര്‍ശന സജ്ജീകരണങ്ങള്‍" -diff -up gnome-shell-extensions-3.8.4/po/mr.po.translations gnome-shell-extensions-3.8.4/po/mr.po ---- gnome-shell-extensions-3.8.4/po/mr.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/mr.po 2013-12-12 00:35:58.469258662 -0500 -@@ -1,24 +1,18 @@ --# Marathi translation for gnome-shell-extensions. --# Copyright (C) 2013 gnome-shell-extensions's COPYRIGHT HOLDER --# This file is distributed under the same license as the gnome-shell-extensions package. --# , 2013. - # Sandeep Shedmake , 2013. - msgid "" - msgstr "" --"Project-Id-Version: gnome-shell-extensions gnome-3-8\n" --"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" --"shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2013-06-30 11:59+0000\n" --"PO-Revision-Date: 2013-07-19 21:21+0530\n" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-10-18 12:49-0400\n" - "Last-Translator: Sandeep Shedmake \n" --"Language-Team: Marathi\n" --"Language: mr\n" -+"Language-Team: Marathi \n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Plural-Forms: nplurals=2; plural=(n != 1);\n" --"X-Generator: Virtaal 0.7.1\n" --"X-Project-Style: gnome\n" -+"Language: mr\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n != 1)\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -27,7 +21,7 @@ msgstr "GNOME क्लासिक" - - #: ../data/gnome-classic.desktop.in.h:2 - msgid "This session logs you into GNOME Classic" --msgstr "हे सत्र तुम्हाला GNOME क्लासिक मध्ये लॉग इन करतं" -+msgstr "हे सत्र तुम्हाला GNOME क्लासिक सत्रामध्ये प्रवेश करून देतो" - - #: ../data/gnome-shell-classic.desktop.in.in.h:1 - msgid "GNOME Shell Classic" -@@ -35,24 +29,25 @@ msgstr "GNOME शेल क्लास� - - #: ../data/gnome-shell-classic.desktop.in.in.h:2 - msgid "Window management and application launching" --msgstr "पटल व्यवस्थापन आणि ॲप्लिकेशन लॉंच करण्यासाठी" -+msgstr "पटल व्यवस्थापन आणि ॲप्लिकेशन सुरू करणे" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 - msgid "Attach modal dialog to the parent window" --msgstr "पुर्वस्तर पटलाला बहुलक संवाद जोडा" -+msgstr "मुख्य पटलकरिता मोडल संवादची जुळणी करा" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" - "This key overrides the key in org.gnome.mutter when running GNOME Shell." --msgstr "ही चावी org.gnome.mutter मधल्या चावीला GNOME शेल सुरु असतांना बंद करते." -+msgstr "" -+"GNOME शेल चालवतेवेळी ही कि org.gnome.mutter मधील कि खोडून पुन्हा लिहते." - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 - msgid "Enable edge tiling when dropping windows on screen edges" --msgstr "पडद्याच्या कोपऱ्यावर पटल सोडतांना कोपरे टाइल करणे सुरु करा" -+msgstr "स्क्रीन किनारांवर पटल टाकतेवेळी किनार टाइनिंग सुरू करा" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 - msgid "Workspaces only on primary monitor" --msgstr "वर्कस्पेसेस फक्त आद्य निरीक्षणावर" -+msgstr "फक्त प्राथमिक मॉनिटरवरील वर्कस्पेसेस" - - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" -@@ -68,11 +63,11 @@ msgstr "थंबनेल आणि ॲ - - #: ../extensions/alternate-tab/prefs.js:37 - msgid "Present windows as" --msgstr "म्हणून पटल प्रस्तुत करा" -+msgstr "पटलांना असे प्रस्तुत करा" - - #: ../extensions/alternate-tab/prefs.js:62 - msgid "Show only windows in the current workspace" --msgstr "चालु वर्कस्पेस मध्ये फक्त पटल दाखवा" -+msgstr "सध्याच्या कार्यक्षेत्रात फक्त पटल दाखवा" - - #. add the new entries - #: ../extensions/alternative-status-menu/extension.js:125 -@@ -85,31 +80,31 @@ msgstr "तात्पुरते ब� - - #: ../extensions/alternative-status-menu/extension.js:131 - msgid "Power Off" --msgstr "वीज बंद करा" -+msgstr "बंद करा" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 - msgid "Enable suspending" --msgstr "स्थगित करणे सुरु करा" -+msgstr "स्थगित करणे सुरू करा" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 - msgid "Control the visibility of the Suspend menu item" --msgstr "स्थगित या मेनू घटकाचे दिसणे नियंत्रित करा" -+msgstr "स्थगित मेन्यु घटकाची दृश्यता नियंत्रीत करा" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 - msgid "Enable hibernating" --msgstr "तात्पुरते बंद करणे सुरु करा" -+msgstr "हायबरनेट करणे सुरू करा" - - #: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 - msgid "Control the visibility of the Hibernate menu item" --msgstr "तात्पुरते बंद या मेनू घटकाचे दिसणे नियंत्रित करा" -+msgstr "हायबरनेट मेन्यु घटकाची दृश्यता नियंत्रीत करा" - - #: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" --msgstr "कार्य सारांश" -+msgstr "प्रक्रिया पूर्वावलोकन" - - #: ../extensions/apps-menu/extension.js:113 - msgid "Favorites" --msgstr "आवडी" -+msgstr "पसंती" - - #: ../extensions/apps-menu/extension.js:278 - msgid "Applications" -@@ -117,15 +112,15 @@ msgstr "ॲप्लिकेशन्� - - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 - msgid "Application and workspace list" --msgstr "ॲप्लिकेशन आणि वर्कस्पेस यादी" -+msgstr "ॲप्लिकेशन आणि कार्यक्षेत्र सूची" - - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 - msgid "" - "A list of strings, each containing an application id (desktop file name), " - "followed by a colon and the workspace number" - msgstr "" --"स्ट्रिंग्सची यादी, ज्यात प्रत्येकमध्ये एक ॲप्लिकेशन आयडी (डेस्कटॉप फाईलचे " --"नाव), नंतर सेमीकोलन आणि वर्कस्पेस नंबर आहे" -+"स्ट्रिंग्स्ची सूची, प्रत्येकात ॲप्लिकेशन id (डेस्कटॉप फाइल नाव) समाविष्टीत, " -+"स्वल्पविराम आणि कार्यक्षेत्र क्रमांक पाठोपाठ" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" -@@ -134,46 +129,47 @@ msgstr "ॲप्लिकेशन" - #: ../extensions/auto-move-windows/prefs.js:64 - #: ../extensions/auto-move-windows/prefs.js:106 - msgid "Workspace" --msgstr "वर्कस्पेस" -+msgstr "कार्यक्षेत्र" - - #: ../extensions/auto-move-windows/prefs.js:80 - msgid "Add rule" --msgstr "नियम जोडा" -+msgstr "नवीन नियम समाविष्ट करा" - - #: ../extensions/auto-move-windows/prefs.js:94 - msgid "Create new matching rule" --msgstr "नवीन मिळताजुळता नियम बनवा" -+msgstr "नवीन जुळण्याजोगी नियम निर्माण करा" - - #: ../extensions/auto-move-windows/prefs.js:98 - msgid "Add" --msgstr "जोडा" -+msgstr "समाविष्ट करा" - - #: ../extensions/drive-menu/extension.js:72 - #, c-format - msgid "Ejecting drive '%s' failed:" --msgstr "ड्राइव बाहेर काढणे '%s' अयशस्वी:" -+msgstr "ड्राइव्ह '%s' बाहेर काढणे अपयशी:" - - #: ../extensions/drive-menu/extension.js:89 - msgid "Removable devices" --msgstr "निघण्यासारखे उपकरणे" -+msgstr "काढून टाकण्याजोगी साधने" - - #: ../extensions/drive-menu/extension.js:106 - msgid "Open File" --msgstr "फाईल उघडा" -+msgstr "फाइल उघडा" - - #: ../extensions/example/extension.js:17 - msgid "Hello, world!" --msgstr "जग, नमस्कार!" -+msgstr "हलो, वर्ल्ड!" - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 - msgid "Alternative greeting text." --msgstr "पर्यायी वंदन मजकूर." -+msgstr "वैकल्पिक प्रणाम मजकूर." - - #: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 - msgid "" - "If not empty, it contains the text that will be shown when clicking on the " - "panel." --msgstr "जर रिकामे नसेल, ह्यात मजकूर आहे जो पॅनलवर क्लिक केल्यावर दिसेल." -+msgstr "" -+"रिकामे नसल्यास, पटलावर क्लिक करताना दाखवण्याजोगी मजकूर समाविष्टीत आहे." - - #. TRANSLATORS: Example is the name of the extension, should not be - #. translated -@@ -183,9 +179,9 @@ msgid "" - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." - msgstr "" --"Example aims to show how to build well behaved extensions for the Shell and " --"as such it has little functionality on its own.\n" --"Nevertheless it's possible to customize the greeting message." -+"उदाहरणात शेल आणि स्वय कामगिरिकरिता योग्य एक्सटेंशन्सची बांधणी कशी करायची ते " -+"ठरवले जाते.\n" -+"तरीही प्रणाम संदशी पसंतीचे करणे शक्य आहे." - - #: ../extensions/example/prefs.js:36 - msgid "Message:" -@@ -193,7 +189,7 @@ msgstr "संदेश:" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 - msgid "Use more screen for windows" --msgstr "पटलासाठी अधिक स्क्रीन वापरा" -+msgstr "पटलांकरिता एकापेक्षा जास्त स्क्रीनचा वापर करा" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 - msgid "" -@@ -201,13 +197,13 @@ msgid "" - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." - msgstr "" --"स्क्रीन ॲसपेक्ट रेशिओ जुळवून, आणि त्यांना बळकट करून सीमक डब्बा कमी करून पटल " --"थंबनेल बसवण्यासाठी अधिक स्क्रीनचा वापर करा. " --"ही सेटिंग फक्त नैसर्गिक पदयोजन योजनेसोबत लागू होते." -+"स्क्रीन ॲस्पेक्ट प्रमाणकरिता स्क्रीनला सहमत करून पटल थंबनेल्स स्थीत " -+"करण्यासाठी, आणि बाऊंडिंग पेटी छोटे करण्यासाठी, एकापेक्षा जास्त स्क्रीनचा " -+"वापर करण्याचा प्रयत्न करा. हे सेटिंग फक्त नॅचरल स्ट्रॅटजिसह लागू होते." - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" --msgstr "पटल मथळ्या सगळ्यात वर ठेवा" -+msgstr "शीर्षकरिता पटल कॅपशन्स स्थीत करा" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 - msgid "" -@@ -215,18 +211,18 @@ msgid "" - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." - msgstr "" --"जर खरं असेल, पटल मथळ्या सगळ्यात वर त्यांच्या थंबनेल वर ठेवा, पूर्वनिर्धारित " --"शेल बंद केल्यावर सगळ्यात खाली ठेवलं जातं. बदल दिसण्यासाठी ह्या सेटिंगला शेल " --"परत सुरु करणे गरजेचे आहे." -+"खरे असल्यास, पटल कॅप्शन्सला ठराविक थंबनेलच्या शीर्षवर स्थीत करा, शेलच्या " -+"तळाला पूर्वनिर्धारितपणे स्थीत करणे वगळूण. ह्या सेटिंगला बदलण्यासाठी " -+"कोणत्याही प्रभावकरिता शेलला पुन्हा सुरू करणे आवश्यक आहे." - - #: ../extensions/places-menu/extension.js:77 - msgid "Places" --msgstr "जागा" -+msgstr "ठिकाणे" - - #: ../extensions/places-menu/placeDisplay.js:56 - #, c-format - msgid "Failed to launch \"%s\"" --msgstr "\"%s\" लाँच करण्यात अयशस्वी" -+msgstr "\"%s\" सुरू करण्यास अपयशी" - - #: ../extensions/places-menu/placeDisplay.js:98 - #: ../extensions/places-menu/placeDisplay.js:121 -@@ -235,63 +231,63 @@ msgstr "संगणक" - - #: ../extensions/places-menu/placeDisplay.js:199 - msgid "Home" --msgstr "घर" -+msgstr "होम" - - #: ../extensions/places-menu/placeDisplay.js:286 - msgid "Browse Network" --msgstr "नेटवर्क तपासा" -+msgstr "नेटवर्क चाळा" - - #: ../extensions/systemMonitor/extension.js:213 - msgid "CPU" --msgstr "सीपीयू" -+msgstr "CPU" - - #: ../extensions/systemMonitor/extension.js:266 - msgid "Memory" --msgstr "स्मृती" -+msgstr "मेमरि" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 - msgid "Theme name" --msgstr "थीमचे नाव" -+msgstr "रंग रूपचे नाव" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 - msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" --msgstr "थीमचे नाव, ~/.themes/name/gnome-shell पासून लोड करावेत" -+msgstr "~/.themes/name/gnome-shell पासून लोड करण्याजोगी, रंग रूपचे नाव" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 - msgid "When to group windows" --msgstr "पटल केव्हा एकत्र करावेत" -+msgstr "पटल केव्हा एकत्रीत करायचे" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 - msgid "" - "Decides when to group windows from the same application on the window list. " - "Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"पटल यादीतून सारख्या ॲपलिकेशनसाठी पटल एकत्रीकरण कधी करायचं हे ठरवतं. शक्य " --"असलेली माहिती \"कधीपण नाही\", \"आपोआप\" आणि \"दरवेळेस\" आहे." -+"पटल सूचीवर एकाच ॲप्लिकेशनपासून पटल कधी एकत्रीत करायचे ते ठरवतो. संभाव्य " -+"मूल्य \"never\", \"auto\" आणि \"always\" आहे." - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" --msgstr "पटल एकत्रीकरण" -+msgstr "पटल गट बनविणे" - - #: ../extensions/window-list/prefs.js:49 - msgid "Never group windows" --msgstr "पटल एकत्र नका करू" -+msgstr "कधीही पटलांचे एक गट करू नका" - - #: ../extensions/window-list/prefs.js:50 - msgid "Group windows when space is limited" --msgstr "पटल एकत्र करा जेव्हा जागा मर्यादित असेल" -+msgstr "जागा मर्यादीत असल्यास पटलांना एका गटामध्ये करा" - - #: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" --msgstr "दरवेळेस पटल एकत्र करा" -+msgstr "नेहमी पटलांना एका गटात करा" - - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" --msgstr "वर्कस्पेस दर्शक" -+msgstr "कार्यक्षेत्र निर्देशक" - - #: ../extensions/workspace-indicator/prefs.js:141 - msgid "Workspace names:" --msgstr "वर्कस्पेस नावे:" -+msgstr "कार्यक्षेत्र नाव:" - - #: ../extensions/workspace-indicator/prefs.js:152 - msgid "Name" -@@ -300,7 +296,7 @@ msgstr "नाव" - #: ../extensions/workspace-indicator/prefs.js:186 - #, c-format - msgid "Workspace %d" --msgstr "वर्कस्पेस %d" -+msgstr "कार्यक्षेत्र %d" - - #: ../extensions/xrandr-indicator/extension.js:30 - msgid "Normal" -@@ -308,20 +304,20 @@ msgstr "सामान्य" - - #: ../extensions/xrandr-indicator/extension.js:31 - msgid "Left" --msgstr "डावा" -+msgstr "डावे" - - #: ../extensions/xrandr-indicator/extension.js:32 - msgid "Right" --msgstr "उजवा" -+msgstr "उजवे" - - #: ../extensions/xrandr-indicator/extension.js:33 - msgid "Upside-down" --msgstr "उलटा" -+msgstr "वर-खाली" - - #: ../extensions/xrandr-indicator/extension.js:50 - msgid "Display" --msgstr "दाखवा" -+msgstr "डिस्पले" - - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" --msgstr "सेटिंग दाखवा" -+msgstr "प्रदर्शन सेटिंग्ज" -diff -up gnome-shell-extensions-3.8.4/po/or.po.translations gnome-shell-extensions-3.8.4/po/or.po ---- gnome-shell-extensions-3.8.4/po/or.po.translations 2013-12-12 00:35:58.470258659 -0500 -+++ gnome-shell-extensions-3.8.4/po/or.po 2013-12-12 00:35:58.469258662 -0500 -@@ -0,0 +1,323 @@ -+# Manoj Kumar Giri , 2013. -+msgid "" -+msgstr "" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-11-05 12:06-0500\n" -+"Last-Translator: Manoj Kumar Giri \n" -+"Language-Team: Oriya \n" -+"MIME-Version: 1.0\n" -+"Content-Type: text/plain; charset=UTF-8\n" -+"Content-Transfer-Encoding: 8bit\n" -+"Language: or\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n != 1)\n" -+ -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "GNOME କ୍ଲାସିକ" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "ଏହି ଅଧିବେଶନ ଆପଣଙ୍କୁ GNOME କ୍ଲାସିକରେ ଲଗ କରାଇଥାଏ" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "GNOME ସେଲ କ୍ଲାସିକ" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "ୱିଣ୍ଡୋ ପରିଚାଳନା ଏବଂ ପ୍ରୟୋଗ ପ୍ରାରମ୍ଭ" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "ମୂଖ୍ୟ ୱିଣ୍ଡୋରେ ମଡେଲ ସଂଳାପକୁ ଲଗାନ୍ତୁ" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "ଏହି କି org.gnome.mutter ରେ GNOME ସେଲ ଚାଲୁଥିବା ସମୟରେ ନବଲିଖନ କରିଥାଏ।" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ପରଦା ଧାରରେ ରଖିବା ସମୟରେ ଧାର ଟାଇଲକୁ ସକ୍ରିୟ କରନ୍ତୁ" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "କାର୍ଯ୍ୟକ୍ଷେତ୍ର କେବଳ ପ୍ରାଥମିକ ମନିଟରରେ ଥାଏ" -+ -+#: ../extensions/alternate-tab/prefs.js:20 -+msgid "Thumbnail only" -+msgstr "କେବଳ ସଂକ୍ଷିପ୍ତ ଲିଖନ" -+ -+#: ../extensions/alternate-tab/prefs.js:21 -+msgid "Application icon only" -+msgstr "କେବଳ ପ୍ରୟୋଗ ଚିତ୍ର ସଂକେତ" -+ -+#: ../extensions/alternate-tab/prefs.js:22 -+msgid "Thumbnail and application icon" -+msgstr "ସଂକ୍ଷେପ ଲିଖନ ଏବଂ ପ୍ରୟୋଗ ଚିତ୍ର ସଂକେତ" -+ -+#: ../extensions/alternate-tab/prefs.js:37 -+msgid "Present windows as" -+msgstr "ଉପସ୍ଥିତ ୱିଣ୍ଡୋ ଯେପରିକି" -+ -+#: ../extensions/alternate-tab/prefs.js:62 -+msgid "Show only windows in the current workspace" -+msgstr "ପ୍ରଚଳିତ କାର୍ଯ୍ୟକ୍ଷେତ୍ରରେ କେବଳ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ" -+ -+#. add the new entries -+#: ../extensions/alternative-status-menu/extension.js:125 -+msgid "Suspend" -+msgstr "ନିଲମ୍ବନ କରନ୍ତୁ" -+ -+#: ../extensions/alternative-status-menu/extension.js:128 -+msgid "Hibernate" -+msgstr "ନିଷ୍କ୍ରିୟ କରନ୍ତୁ" -+ -+#: ../extensions/alternative-status-menu/extension.js:131 -+msgid "Power Off" -+msgstr "ବିଦ୍ୟୁତ ପ୍ରବାହ ବନ୍ଦ କରନ୍ତୁ" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 -+msgid "Enable suspending" -+msgstr "ନିଲମ୍ବନକୁ ସକ୍ରିୟ କରନ୍ତୁ" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 -+msgid "Control the visibility of the Suspend menu item" -+msgstr "ନିଲମ୍ବିତ ତାଲିକା ବସ୍ତୁର ଦୃଶ୍ୟମାନ୍ୟତାକୁ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 -+msgid "Enable hibernating" -+msgstr "ହାଇବରନେଟକୁ ସକ୍ଷମ କରନ୍ତୁ" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 -+msgid "Control the visibility of the Hibernate menu item" -+msgstr "ହାଇବରନେଟ ତାଲିକା ବସ୍ତୁର ଦୃଶ୍ୟମାନ୍ୟତାକୁ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ" -+ -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକର ସମୀକ୍ଷା" -+ -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "ମନପସନ୍ଦ" -+ -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "ପ୍ରୟୋଗ" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 -+msgid "Application and workspace list" -+msgstr "ପ୍ରୟୋଗ ଏବଂ କାର୍ଯ୍ୟକ୍ଷେତ୍ର ତାଲିକା" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 -+msgid "" -+"A list of strings, each containing an application id (desktop file name), " -+"followed by a colon and the workspace number" -+msgstr "" -+"ବାକ୍ୟଖଣ୍ଡଗୁଡ଼ିକର ଗୋଟିଏ ତାଲିକା, ପ୍ରତ୍ୟେକ ଗୋଟିଏ ପ୍ରୟୋଗ id ଧାରଣ କରିଅଛି (ଡେସ୍କଟପ " -+"ଫାଇଲ ନାମ), ଏହାପରେ ଏକ ବିରାମ ଚିହ୍ନ ଏବଂ କାର୍ଯ୍ୟକ୍ଷେତ୍ର କ୍ରମ ସଂଖ୍ୟା" -+ -+#: ../extensions/auto-move-windows/prefs.js:55 -+msgid "Application" -+msgstr "ପ୍ରୟୋଗ" -+ -+#: ../extensions/auto-move-windows/prefs.js:64 -+#: ../extensions/auto-move-windows/prefs.js:106 -+msgid "Workspace" -+msgstr "କାର୍ୟ୍ଯସ୍ଥାନ" -+ -+#: ../extensions/auto-move-windows/prefs.js:80 -+msgid "Add rule" -+msgstr "ନିୟମ ଯୋଗକରନ୍ତୁ" -+ -+#: ../extensions/auto-move-windows/prefs.js:94 -+msgid "Create new matching rule" -+msgstr "ନୂଆ ମେଳଖାଉଥିବା ନିୟମ ସୃଷ୍ଟି କରନ୍ତୁ" -+ -+#: ../extensions/auto-move-windows/prefs.js:98 -+msgid "Add" -+msgstr "ଯୋଗ କରନ୍ତୁ" -+ -+#: ../extensions/drive-menu/extension.js:72 -+#, c-format -+msgid "Ejecting drive '%s' failed:" -+msgstr "ଡ୍ରାଇଭ '%s' କୁ ବାହାର କରିବା ବିଫଳ ହୋଇଛି:" -+ -+#: ../extensions/drive-menu/extension.js:89 -+msgid "Removable devices" -+msgstr "କଢ଼ାଯୋଗ୍ୟ ଉପକରଣଗୁଡ଼ିକ" -+ -+#: ../extensions/drive-menu/extension.js:106 -+msgid "Open File" -+msgstr "ଫାଇଲକୁ ଖୋଲନ୍ତୁ" -+ -+#: ../extensions/example/extension.js:17 -+msgid "Hello, world!" -+msgstr "ହେଲୋ, ୱାର୍ଲଡ!" -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 -+msgid "Alternative greeting text." -+msgstr "ବୈକଳ୍ପିକ ଅବିନନ୍ଦନ ପାଠ୍ୟ।" -+ -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 -+msgid "" -+"If not empty, it contains the text that will be shown when clicking on the " -+"panel." -+msgstr "" -+"ଯଦି ଖାଲିନଥାଏ, ତେବେ ପ୍ୟାନେଲ ଉପରେ କ୍ଲିକ କରିବା ସମୟରେ ଦର୍ଶାଇବାକୁ ଥିବା ପାଠ୍ୟ ଧାରଣ " -+"କରିଥାଏ।" -+ -+#. TRANSLATORS: Example is the name of the extension, should not be -+#. translated -+#: ../extensions/example/prefs.js:30 -+msgid "" -+"Example aims to show how to build well behaved extensions for the Shell and " -+"as such it has little functionality on its own.\n" -+"Nevertheless it's possible to customize the greeting message." -+msgstr "" -+"ଏହି ଉଦାହରଣର ଲକ୍ଷ୍ଯ ହେଉଛି ସେଲ ପାଇଁ ଉତ୍ତମ ଅନୁଲଗ୍ନଗୁଡ଼ିକୁ ନିର୍ମାଣ କରିବା ଯେପରିକି " -+"ଏଥିରେ ନିଜର ବହୁତ କମ କାର୍ଯ୍ୟକାରିତା ଥାଏ।\n" -+"ଅନ୍ୟଥା ଅଭିନନ୍ଦନ ସନ୍ଦେଶକୁ ଇଚ୍ଛାରୂପଣ କରିବା ସମ୍ଭବ ହୋଇଥାଏ।" -+ -+#: ../extensions/example/prefs.js:36 -+msgid "Message:" -+msgstr "ସନ୍ଦେଶ:" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 -+msgid "Use more screen for windows" -+msgstr "ୱିଣ୍ଡୋଗୁଡ଼ିକ ପାଇଁ ଅଧିକ ପରଦା ବ୍ୟବହାର କରନ୍ତୁ" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 -+msgid "" -+"Try to use more screen for placing window thumbnails by adapting to screen " -+"aspect ratio, and consolidating them further to reduce the bounding box. " -+"This setting applies only with the natural placement strategy." -+msgstr "" -+"ପରଦା ବିଭେଦନକୁ ଗ୍ରହଣ କରି ୱିଣ୍ଡୋକୁ ରଖିବାକୁ ଅଧିକ ପରଦା ବ୍ୟବହାର କରିବାକୁ ଚେଷ୍ଟା " -+"କରନ୍ତୁ, ଏବଂ ବାକ୍ସର ସୀମାକୁ କମ କରିବାକୁ ସେମାନଙ୍କୁ ଏକତ୍ରିତ କରିଥାଏ। ଏହି ସଂରଚନା " -+"କେବଳ ପ୍ରାକୃତିକ କୌଶଳ ସହିତ ପ୍ରୟୋଗ ହୋଇଥାଏ।" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 -+msgid "Place window captions on top" -+msgstr "ୱିଣ୍ଡୋ ଶୀର୍ଷକକୁ ଉପରେ ରଖନ୍ତୁ" -+ -+#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 -+msgid "" -+"If true, place window captions on top the respective thumbnail, overriding " -+"shell default of placing it at the bottom. Changing this setting requires " -+"restarting the shell to have any effect." -+msgstr "" -+"ଯଦି true, ତେବେ ୱିଣ୍ଡୋ ଶୀର୍ଷକକୁ ଉଚିତ ସଂକ୍ଷିପ୍ତ ଲିଖନ ଉପରେ ରଖନ୍ତୁ, ସେଲ " -+"ପୂର୍ବନିର୍ଦ୍ଧାରିତକୁ ତଳେ ରଖିକରି ନବଲିଖନ କରୁଅଛି। ଏହି ସେଟିଙ୍ଗକୁ ପରିବର୍ତ୍ତନ କରିବା " -+"ପାଇଁ ସେଲକୁ ପୁନଃଚାଳନ କରିବା ଆବଶ୍ୟକ ହୋଇଥାଏ।" -+ -+#: ../extensions/places-menu/extension.js:77 -+msgid "Places" -+msgstr "ସ୍ଥାନଗୁଡିକ" -+ -+#: ../extensions/places-menu/placeDisplay.js:56 -+#, c-format -+msgid "Failed to launch \"%s\"" -+msgstr "\"%s\" କୁ ଆରମ୍ଭ କରିବାରେ ବିଫଳ" -+ -+#: ../extensions/places-menu/placeDisplay.js:98 -+#: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "କମ୍ପୁଟର" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "ମୂଳ ସ୍ଥାନ" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "ନେଟୱାର୍କ ବ୍ରାଉଜ କରନ୍ତୁ" -+ -+#: ../extensions/systemMonitor/extension.js:213 -+msgid "CPU" -+msgstr "CPU" -+ -+#: ../extensions/systemMonitor/extension.js:266 -+msgid "Memory" -+msgstr "ସ୍ମୃତିସ୍ଥାନ" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 -+msgid "Theme name" -+msgstr "ପ୍ରସଙ୍ଗ ନାମ" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 -+msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -+msgstr "~/.themes/name/gnome-shell ରୁ ଧାରଣ ହେବାକୁ ଥିବା ପ୍ରସଙ୍ଗର ନାମ" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "ୱିଣ୍ଡୋଗୁଡିକୁ କେତେବେଳେ ସମୂହିତ କରାଯିବ" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"ସ୍ଥିର କରେ ଗୋଟିଏ ପ୍ରୟୋଗର ୱିଣ୍ଡୋଗୁଡିକ କେତେବେଳେ ୱିଣ୍ଡୋ ତାଲିକାରେ ସମୂହିତ କରାଯିବ। " -+"ସାମ୍ଭାବ୍ଯ ମୂଲ୍ଯ ହେଲା \"କଦାପି ନୁହଁ\", \"ସ୍ୱୟଂଚାଳିତ\" ଏବଂ \"ସର୍ବଦା\"।" -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "ୱିଣ୍ଡୋ ସମୂହ କରାଯାଉଛି" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "ୱିଣ୍ଡୋଗୁଡିକୁ କଦାପି ସମୂହିତ କରାଯିବ ନାହିଁ" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "ସ୍ଥାନ ସୀମିତ ଥିଲେ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ସମୂହିତ କରନ୍ତୁ" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "ସର୍ବଦା ୱିଣ୍ଡୋଗୁଡିକୁ ସମୂହିତ କରାଯିବ" -+ -+#: ../extensions/workspace-indicator/extension.js:30 -+msgid "Workspace Indicator" -+msgstr "କାର୍ଯ୍ୟକ୍ଷେତ୍ର ସୂଚକ" -+ -+#: ../extensions/workspace-indicator/prefs.js:141 -+msgid "Workspace names:" -+msgstr "କାର୍ଯ୍ଯକ୍ଷେତ୍ର ନାମ:" -+ -+#: ../extensions/workspace-indicator/prefs.js:152 -+msgid "Name" -+msgstr "ନାମ" -+ -+#: ../extensions/workspace-indicator/prefs.js:186 -+#, c-format -+msgid "Workspace %d" -+msgstr "କାର୍ଯ୍ଯକ୍ଷେତ୍ର %d" -+ -+#: ../extensions/xrandr-indicator/extension.js:30 -+msgid "Normal" -+msgstr "ସ୍ବାଭାବିକ" -+ -+#: ../extensions/xrandr-indicator/extension.js:31 -+msgid "Left" -+msgstr "ବାମ" -+ -+#: ../extensions/xrandr-indicator/extension.js:32 -+msgid "Right" -+msgstr "ଡାହାଣ" -+ -+#: ../extensions/xrandr-indicator/extension.js:33 -+msgid "Upside-down" -+msgstr "ଉପରୁ ତଳକୁ" -+ -+#: ../extensions/xrandr-indicator/extension.js:50 -+msgid "Display" -+msgstr "ଦେଖାଅ" -+ -+#: ../extensions/xrandr-indicator/extension.js:80 -+msgid "Display Settings" -+msgstr "ସେଟିଙ୍ଗଗୁଡିକ ଦର୍ଶାନ୍ତୁ" -diff -up gnome-shell-extensions-3.8.4/po/pa.po.translations gnome-shell-extensions-3.8.4/po/pa.po ---- gnome-shell-extensions-3.8.4/po/pa.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/pa.po 2013-12-12 00:35:58.470258659 -0500 -@@ -1,65 +1,92 @@ - # Punjabi translation for gnome-shell-extensions. - # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER - # This file is distributed under the same license as the gnome-shell-extensions package. --# -+# - # A S Alam , 2011, 2012. -+# asaini , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" - "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" - "shell&keywords=I18N+L10N&component=extensions\n" - "POT-Creation-Date: 2012-10-16 14:24+0000\n" --"PO-Revision-Date: 2012-10-25 09:10+0530\n" --"Last-Translator: A S Alam \n" -+"PO-Revision-Date: 2013-10-08 08:00-0400\n" -+"Last-Translator: asaini \n" - "Language-Team: Punjabi/Panjabi \n" --"Language: pa\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"X-Generator: Lokalize 1.5\n" -+"Language: pa\n" - "Plural-Forms: nplurals=2; plural=n != 1;\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1 --msgid "The application icon mode." --msgstr "ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ ਮੋਡ" -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "GNOME ਕਲਾਸਿਕ" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "ਇਹ ਸੈਸ਼ਨ ਤੁਹਾਨੂੰ GNOME ਵਿੱਚ ਲਾਗ ਇਨ ਕਰਦਾ ਹੈ" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "GNOME ਸ਼ੈਲ ਕਲਾਸਿਕ" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "ਵਿੰਡੋ ਪ੍ਰਬੰਧਨ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਜਾਰੀ ਕਰਣਾ" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "ਮੂਲ ਵਿੰਡੋ ਵਿੱਚ ਮਾਡਲ ਡਾਈਲਾਗ ਨੱਥੀ ਕਰੋ" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2 -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" --"Configures how the windows are shown in the switcher. Valid possibilities " --"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" --"only' (shows only the application icon) or 'both'." -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." - msgstr "" -+"ਇਹ ਕੁੰਜੀ ਗਨੋਮ ਸ਼ੈੱਲ ਚੱਲਣ ਦੇ ਦੌਰਾਨ org.gnome.mutter ਕੁੰਜੀ ਨੂੰ ਮੁੜ-ਲਿਖ ਦਿੰਦੀ " -+"ਹੈ।" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "" -+"ਜਦੋਂ ਵਿੰਡੋਜ਼ ਨੂੰ ਸਕਰੀਨ ਕੋਨਿਆਂ ਤੋਂ ਡਰਾਪ ਕਰਨਾ ਹੋਵੇ ਤਾਂ ਕੋਨਾ ਟਿਲਿੰਗ ਚਾਲੂ ਕਰੋ" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr " ਵਰਕਸਪੇਸ ਕੇਵਲ ਮੁੱਖ ਮਾਨੀਟਰ ਉੱਤੇ" - --#: ../extensions/alternate-tab/prefs.js:26 -+#: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" --msgstr "ਕੇਵਲ ਥੰਮਨੇਲ ਹੀ" -+msgstr "ਕੇਵਲ ਥੰਬਨੇਲ ਹੀ" - --#: ../extensions/alternate-tab/prefs.js:27 -+#: ../extensions/alternate-tab/prefs.js:21 - msgid "Application icon only" --msgstr "ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ ਹੀ" -+msgstr "ਸਿਰਫ਼ ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ" - --#: ../extensions/alternate-tab/prefs.js:28 -+#: ../extensions/alternate-tab/prefs.js:22 - msgid "Thumbnail and application icon" --msgstr "ਥੰਮਨੇਲ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ" -+msgstr "ਥੰਬਨੇਲ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ" - --#: ../extensions/alternate-tab/prefs.js:43 -+#: ../extensions/alternate-tab/prefs.js:37 - msgid "Present windows as" - msgstr "ਵਿੰਡੋਜ਼ ਨੂੰ ਪੇਸ਼ ਕਰੋ" - --#: ../extensions/alternate-tab/prefs.js:68 -+#: ../extensions/alternate-tab/prefs.js:62 - msgid "Show only windows in the current workspace" - msgstr "ਮੌਜੂਦਾ ਵਰਕਸਪੇਸ ਵਿੱਚੋਂ ਹੀ ਵਿੰਡੋਜ਼ ਹੀ ਵੇਖਾਓ" - - #. add the new entries --#: ../extensions/alternative-status-menu/extension.js:86 -+#: ../extensions/alternative-status-menu/extension.js:125 - msgid "Suspend" - msgstr "ਸਸਪੈਂਡ" - --#: ../extensions/alternative-status-menu/extension.js:91 -+#: ../extensions/alternative-status-menu/extension.js:128 - msgid "Hibernate" - msgstr "ਹਾਈਬਰਨੇਟ" - --#: ../extensions/alternative-status-menu/extension.js:96 -+#: ../extensions/alternative-status-menu/extension.js:131 - msgid "Power Off" - msgstr "ਬੰਦ ਕਰੋ" - -@@ -79,6 +106,18 @@ msgstr "ਹਾਈਬਰਨੇਟ ਕਰ� - msgid "Control the visibility of the Hibernate menu item" - msgstr "ਹਾਈਬਰਨੇਟ ਮੇਨੂ ਆਈਟਮ ਦੀ ਦਿੱਖ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ" - -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "ਸਰਗਰਮੀ ਸੰਖੇਪ ਜਾਣਕਾਰੀ" -+ -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "ਪਸੰਦੀਦਾ" -+ -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "ਐਪਲੀਕੇਸ਼ਨਾਂ" -+ - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 - msgid "Application and workspace list" - msgstr "ਐਪਲੀਕੇਸ਼ਨ ਅਤੇ ਵਰਕਸਪੇਸ ਲਿਸਟ" -@@ -89,8 +128,7 @@ msgid "" - "followed by a colon and the workspace number" - msgstr "" - "ਲਾਈਨਾਂ ਦੀ ਲਿਸਟ, ਜੋ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ID (ਡੈਸਕਟਾਪ ਫਾਇਲ ਨਾਂ), ਬਾਅਦ 'ਚ ਕਾਲਮ ਅਤੇ " --"ਵਰਕਸਪੇਸ ਨੰਬਰ " --"ਰੱਖਦਾ ਹੈ" -+"ਵਰਕਸਪੇਸ ਨੰਬਰ ਰੱਖਦਾ ਹੈ" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" -@@ -123,7 +161,6 @@ msgid "Removable devices" - msgstr "ਹਟਾਉਣਯੋਗ ਜੰਤਰ" - - #: ../extensions/drive-menu/extension.js:106 --#| msgid "Open file manager" - msgid "Open File" - msgstr "ਫਾਇਲ ਖੋਲ੍ਹੋ" - -@@ -151,6 +188,9 @@ msgid "" - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." - msgstr "" -+"ਉਦਾਹਰਣ ਦਾ ਮਕਸਦ ਹੈ ਸ਼ੈਲ ਲਈ ਇੱਕ ਵਧੀਆ ਵਰਤਾਅ ਕਰਨ ਵਾਲੀ ਐਕਸਟੈਂਸ਼ਨ ਵੈਸੇ ਇਸ ਦੀ ਆਪਣੇ ਆਪ " -+"ਵਿੱਚ ਕਾਰਜਸ਼ੀਲਤਾ ਘੱਟ ਹੀ ਹੈ।\n" -+"ਐਪਰ ਸਵਾਗਤੀ ਸੁਨੇਹੇ ਨੂੰ ਚੁਣਿੰਦਾ ਬਣਾਉਣਾ ਮੁਮਕਿਨ ਹੈ" - - #: ../extensions/example/prefs.js:36 - msgid "Message:" -@@ -166,6 +206,9 @@ msgid "" - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." - msgstr "" -+"ਵਿੰਡੋਅ ਥੰਬ-ਨੇਲਾਂ ਨੂੰ ਰੱਖਣ ਲਈ ਜਿਆਦਾ ਸਕਰੀਨ ਨੂੰ ਵਰਤਣ ਲਈ ਸਕਰੀਨ ਐਸਪੈਕਟ ਅਨੁਪਾਤ ਨਾਲ " -+"ਅਨੁਕੂਲ ਹੋ ਕੇ, ਅਤੇ ਅੱਗੇ ਫਿਰ ਉਹਨਾਂ ਨੂੰ ਇੱਕ ਕਰ ਕੇ ਬਾਊਂਡਿੰਗ ਬਕਸੇ ਨੂੰ ਘਟਾਉਣ ਦੀ " -+"ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਇਹ ਸੈਟਿੰਗ ਸਿਰਫ ਕੁਦਰਤੀ ਨਿਯੁਕਤੀ ਨੀਤੀ ਤੇ ਹੀ ਲਾਗੂ ਹੁੰਦੀ ਹੈ" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" -@@ -177,39 +220,31 @@ msgid "" - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." - msgstr "" -+"ਜੇ ਸਹੀ ਹੋਵੇ, ਵਿੰਡੋ ਕੈਪਸ਼ਨਾਂ ਨੂੰ ਸੰਬੰਧਿਤ ਥੰਬ-ਨੇਲਾਂ ਦੇ ਸਿਖ਼ਰ ਤੇ ਰੱਖਦਾ ਹੈ, ਸ਼ੈੱਲ " -+"ਦਾ ਮੂਲ ਜੋ ਇਸਨੂੰ ਥੱਲੇ ਰੱਖਦਾ ਹੈ ਨੂੰ ਮੁੜ-ਲਿਖ ਕੇ। ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣ ਤੇ ਇਹਨਾਂ ਦੇ " -+"ਪ੍ਰਭਾਵੀ ਹੋਣ ਲਈ ਸ਼ੈੱਲ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਲੋੜ ਪਵੇਗੀ।" - --#: ../extensions/places-menu/extension.js:46 -+#: ../extensions/places-menu/extension.js:77 - msgid "Places" - msgstr "ਥਾਵਾਂ" - --#: ../extensions/places-menu/extension.js:47 --msgid "Devices" --msgstr "ਜੰਤਰ" -- --#: ../extensions/places-menu/extension.js:48 --msgid "Bookmarks" --msgstr "ਬੁੱਕਮਾਰਕ" -- --#: ../extensions/places-menu/extension.js:49 --msgid "Network" --msgstr "ਨੈੱਟਵਰਕ" -- --#: ../extensions/places-menu/placeDisplay.js:48 -+#: ../extensions/places-menu/placeDisplay.js:56 - #, c-format - msgid "Failed to launch \"%s\"" - msgstr "\"%s\" ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ ਹੈ" - -+#: ../extensions/places-menu/placeDisplay.js:98 - #: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "ਕੰਪਿਊਟਰ" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 - msgid "Home" - msgstr "ਘਰ" - --#: ../extensions/places-menu/placeDisplay.js:184 --msgid "File System" --msgstr "ਫਾਇਲ ਸਿਸਟਮ" -- --#: ../extensions/places-menu/placeDisplay.js:188 --msgid "Browse network" --msgstr "ਨੈੱਟਵਰਕ ਝਲਕ" -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "ਨੈੱਟਵਰਕ ਬਰਾਊਜ਼ ਕਰੋ" - - #: ../extensions/systemMonitor/extension.js:213 - msgid "CPU" -@@ -227,6 +262,34 @@ msgstr "ਥੀਮ ਨਾਂ" - msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" - msgstr "ਥੀਮ ਦਾ ਨਾਂ, ਜੋ ~/.themes/name/gnome-shell ਤੋਂ ਲੋਡ ਕੀਤਾ ਜਾਵੇਗਾ" - -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "ਜਦੋਂ ਵਿੰਡੋਜ਼ ਦਾ ਸਮੂਹ ਕਰਨਾ ਹੋਵੇ" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"ਵਿੰਡੋ ਸੂਚੀ ਉੱਤੇ ਉਸੇ ਐਪਲੀਕੇਸ਼ਨ ਤੋਂ ਇਹ ਨਿਰਣਾ ਲਓ ਕਿ ਵਿੰਡੋਜ਼ ਸਮੂਹ ਕਦੋਂ ਬਣਾਉਣਾ ਹੈ। " -+"ਸੰਭਵ ਮੁੱਲ ਹਨ \"ਕਦੇ ਨਹੀਂ\", \"ਸ੍ਵੈ-ਚਲਿਤ\" ਅਤੇ \"ਹਮੇਸ਼ਾ\"।" -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "ਵਿੰਡੋ ਸਮੂਹੀਕਰਣ" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "ਵਿੰਡੋਜ਼ ਸਮੂਹ ਕਦੇ ਨਾ ਬਣਾਓ" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "ਜਦੋਂ ਥਾਂ ਸੀਮਿਤ ਹੋਵੇ ਤਾਂ ਵਿੰਡੋਜ਼ ਦੇ ਸਮੂਹ ਬਣਾ ਦਿਓ" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "ਹਮੇਸ਼ਾ ਵਿੰਡੋਜ਼ ਦੇ ਸਮੂਹ ਬਣਾਓ" -+ - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" - msgstr "ਵਰਕਸਪੇਸ ਇੰਡੀਕੇਟਰ" -@@ -265,173 +328,5 @@ msgid "Display" - msgstr "ਡਿਸਪਲੇਅ" - - #: ../extensions/xrandr-indicator/extension.js:80 --#| msgid "System Settings" - msgid "Display Settings" - msgstr "ਡਿਸਪਲੇਅ ਸੈਟਿੰਗ" -- --#~ msgid "Drag here to add favorites" --#~ msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜਨ ਲਈ ਇੱਥੇ ਸੁੱਟੋ" -- --#~ msgid "New Window" --#~ msgstr "ਨਵੀਂ ਵਿੰਡੋ" -- --#~ msgid "Quit Application" --#~ msgstr "ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰੋ" -- --#~ msgid "Remove from Favorites" --#~ msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ" -- --#~ msgid "Add to Favorites" --#~ msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ" -- --#~ msgid "Position of the dock" --#~ msgstr "ਡੌਕ ਦੀ ਸਥਿਤੀ" -- --#~ msgid "" --#~ "Sets the position of the dock in the screen. Allowed values are 'right' " --#~ "or 'left'" --#~ msgstr "ਸਕਰੀਨ ਵਿੱਚ ਡੌਕ ਦੀ ਸਥਿਤੀ ਸੈੱਟ ਕਰਦਾ ਹੈ। ਸੰਭਵ ਮੁੱਲ ਹਨ 'right' ਜਾਂ 'left'" -- --#~ msgid "Icon size" --#~ msgstr "ਆਈਕਾਨ ਆਕਾਰ" -- --#~ msgid "Sets icon size of the dock." --#~ msgstr "ਡੌਕ ਦਾ ਆਈਕਾਨ ਆਕਾਰ ਸੈੱਟ ਕਰੋ।" -- --#~ msgid "Enable/disable autohide" --#~ msgstr "ਆਪੇ-ਓਹਲੇ ਕਰਨਾ ਚਾਲੂ/ਬੰਦ" -- --#~ msgid "Autohide effect" --#~ msgstr "ਆਪੇ-ਓਹਲੇ ਹੋਣ ਪ੍ਰਭਾਵ" -- --#~ msgid "" --#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' " --#~ "and 'move'" --#~ msgstr "" --#~ "ਡੌਕ ਓਹਲੇ ਕਰਨ ਦਾ ਪ੍ਰਭਾਵ ਸੈੱਟ ਕਰਦਾ ਹੈ। ਸੰਭਵ ਮੁੱਲ ਹਨ 'resize', 'rescale' ਅਤੇ 'move'" -- --#~ msgid "Autohide duration" --#~ msgstr "ਆਪੇ ਓਹਲੇ ਹੋਣ ਅੰਤਰਾਲ" -- --#~ msgid "Sets the time duration of the autohide effect." --#~ msgstr "ਆਪੇ-ਓਹਲੇ ਕਰਨ ਦੇ ਪ੍ਰਭਾਵ ਦੀ ਸਮੇਂ ਦਾ ਅੰਤਰਾਲ ਸੈੱਟ ਕਰੋ।" -- --#~ msgid "Monitor" --#~ msgstr "ਮਾਨੀਟਰ" -- --#~ msgid "" --#~ "Sets monitor to display dock in. The default value (-1) is the primary " --#~ "monitor." --#~ msgstr "ਡੌਕ ਵਿੱਚ ਵੇਖਾਉਣ ਲਈ ਨਿਗਾਰਨ ਸੈੱਟ ਕਰੋ। ਪ੍ਰਾਈਮਰੀ ਮਾਨੀਟਰ ਲਈ ਡਿਫਾਲਟ ਮੁੱਲ (-1) ਹੈ।" -- --#~ msgid "%s is away." --#~ msgstr "%s ਦੂਰ ਹੈ।" -- --#~ msgid "%s is offline." --#~ msgstr "%s ਆਫਲਾਈਨ ਹੈ।" -- --#~ msgid "%s is online." --#~ msgstr "%s ਆਨਲਾਈਨ ਹੈ।" -- --#~ msgid "%s is busy." --#~ msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।" -- --#~ msgid "Removable Devices" --#~ msgstr "ਹਟਾਉਣਯੋਗ ਜੰਤਰ" -- --#~ msgid "Configure display settings..." --#~ msgstr "ਡਿਸਪਲੇਅ ਸੈਟਿੰਗ ਸੰਰਚਨਾ..." -- --#~ msgid "The alt tab behaviour." --#~ msgstr "alt tab ਰਵੱਈਆ ਹੈ।" -- --#~| msgid "" --#~| "Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails " --#~| "and workspace_icons." --#~ msgid "" --#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and " --#~ "workspace_icons. See the configuration dialogs for details." --#~ msgstr "" --#~ "Alt-Tab ਰਵੱਈਆ ਸੈੱਟ ਕਰੋ। ਸੰਭਵ ਮੁੱਲ ਹਨ: all_thumbnails ਅਤੇ workspace_icons। ਵੇਰਵੇ ਲਈ " --#~ "ਸੰਰਚਨਾ ਡਾਈਲਾਗ ਵੇਖੋ।" -- --#~ msgid "Workspace & Icons" --#~ msgstr "ਵਰਕਸਪੇਸ ਅਤੇ ਆਈਕਾਨ" -- --#~ msgid "Available" --#~ msgstr "ਉਪਲੱਬਧ" -- --#~ msgid "Busy" --#~ msgstr "ਰੁਝਿਆ" -- --#~ msgid "My Account" --#~ msgstr "ਮੇਰਾ ਅਕਾਊਂਟ" -- --#~ msgid "Lock Screen" --#~ msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ" -- --#~ msgid "Switch User" --#~ msgstr "ਯੂਜ਼ਰ ਬਦਲੋ" -- --#~ msgid "Log Out..." --#~ msgstr "ਲਾਗਆਉਟ..." -- --#~ msgid "" --#~ "This is the first time you use the Alternate Tab extension. \n" --#~ "Please choose your preferred behaviour:\n" --#~ "\n" --#~ "All & Thumbnails:\n" --#~ " This mode presents all applications from all workspaces in one " --#~ "selection \n" --#~ " list. Instead of using the application icon of every window, it uses " --#~ "small \n" --#~ " thumbnails resembling the window itself. \n" --#~ "\n" --#~ "Workspace & Icons:\n" --#~ " This mode let's you switch between the applications of your current \n" --#~ " workspace and gives you additionally the option to switch to the last " --#~ "used \n" --#~ " application of your previous workspace. This is always the last " --#~ "symbol in \n" --#~ " the list and is segregated by a separator/vertical line if " --#~ "available. \n" --#~ " Every window is represented by its application icon. \n" --#~ "\n" --#~ "Native:\n" --#~ " This mode is the native GNOME 3 behaviour or in other words: " --#~ "Clicking \n" --#~ " native switches the Alternate Tab extension off. \n" --#~ msgstr "" --#~ "ਇਹ ਪਹਿਲੀ ਵਾਰ ਹੈ, ਜਦੋਂ ਤੁਸੀਂ Alt(ernate) Tab ਇਕਸਟੈਨਸ਼ਨ ਵਰਤ ਰਹੇ ਹੋ।\n" --#~ "ਆਪਣੀ ਪਸੰਦ ਮੁਤਾਬਕ ਰਵੱਈਏ ਦੀ ਚੋਣ ਕਰੋ ਜੀ:\n" --#~ "\n" --#~ "ਸਭ ਅਤੇ ਥੰਮਨੇਲ:\n" --#~ " ਇਹ ਮੋਡ ਸਭ ਵਰਕਸਪੇਸ ਤੋਂ ਸਭ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਇੱਕ ਚੋਣ ਲਿਸਟ ਵਿੱਚ ਵੇਖਾਉਂਦੀ ਹੈ।\n" --#~ " ਹਰੇਕ ਵਿੰਡੋ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ ਵਰਤਣ ਦੀ ਬਜਾਏ, ਇਹ ਹਰ ਵਿੰਡੋ ਨਾਲ ਰਲਦੇ\n" --#~ " ਛੋਟੇ ਛੋਟੇ ਥੰਮਨੇਲ ਵਰਤਦੀ ਹੈ।\n" --#~ "\n" --#~ "ਵਰਕਸਪੇਸ ਅਤੇ ਆਈਕਾਨ:\n" --#~ " ਇਹ ਮੋਡ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਵਰਕਸਪੇਸ ਦੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਮੱਦਦ ਕਰਨ ਲਈ ਸਹਾਇਕ ਹੈ\n" --#~ " ਅਤੇ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਪਿਛਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਵਰਤੀ ਆਖਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਰਤਣ ਦੀ ਚੋਣ ਵੀ\n" --#~ " ਵਾਧੂ ਰੂਪ ਵਿੱਚ ਦਿੰਦਾ ਹੈ। ਇਹ ਲਿਸਟ ਵਿੱਚ ਆਖਰੀ ਨਿਸ਼ਾਨ ਹੁੰਦਾ ਹੈ ਅਤੇ ਇਸ ਨੂੰ ਵੱਖ ਕਰਨ ਲਈ\n" --#~ " ਖਿੜਵੀ/ਲੇਟਵੀ ਲਾਈਨ ਨਾਲ ਵੱਖ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜੇ ਉਪਲੱਬਧ ਹੋਵੇ।\n" --#~ " ਹਰੇਕ ਵਿੰਡੋ ਨੂੰ ਇਸ ਦੇ ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ ਨਾਲ ਦਰਸਾਇਆ ਜਾਂਦਾ ਹੈ।\n" --#~ "\n" --#~ "ਨੇਟਿਵ:\n" --#~ " ਇਹ ਮੋਡ ਨੇਟਿਵ ਗਨੋਮ 3 ਰਵੱਈਆ ਹੈ ਜਾਂ ਇੰਝ ਕਹਿ ਲਵੋ: ਨੇਟਿਵ ਸਵਿੱਚਾਂ ਨੂੰ ਨਾਲ\n" --#~ " Alternative Tab ਇਕਸਟੈਨਸ਼ਨ ਬੰਦ ਕਰਦਾ ਹੈ।\n" -- --#~ msgid "Alt Tab Behaviour" --#~ msgstr "Alt Tab ਰਵੱਈਆ" -- --#~ msgid "Cancel" --#~ msgstr "ਰੱਦ ਕਰੋ" -- --#~ msgid "Ask the user for a default behaviour if true." --#~ msgstr "ਜੇ ਸਹੀ ਹੋਵੇ ਤਾਂ ਡਿਫਾਲਟ ਰਵੱਈਏ ਲਈ ਯੂਜ਼ਰ ਨੂੰ ਪੁੱਛੋ।" -- --#~ msgid "Indicates if Alternate Tab is newly installed" --#~ msgstr "ਦਰਸਾਉਂਦਾ ਹੈ ਜੇ ਬਦਲਵੀਂ ਟੈਬ ਨਵੀਂ ਇੰਸਟਾਲ ਹੈ" -- --#~ msgid "Window placement strategy" --#~ msgstr "ਵਿੰਡੋ ਸਥਿਤੀ ਤਰਕੀਬ" -diff -up gnome-shell-extensions-3.8.4/po/pt_BR.po.translations gnome-shell-extensions-3.8.4/po/pt_BR.po ---- gnome-shell-extensions-3.8.4/po/pt_BR.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/pt_BR.po 2013-12-12 00:35:58.470258659 -0500 -@@ -8,21 +8,22 @@ - # Gabriel Speckhahn , 2012. - # Og Maciel , 2012. - # Rafael Ferreira , 2013. -+# gcintra , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions master\n" - "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" - "shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2013-06-17 19:46+0000\n" --"PO-Revision-Date: 2013-06-23 06:51-0300\n" --"Last-Translator: Rafael Ferreira \n" -+"POT-Creation-Date: 2013-04-16 19:31+0000\n" -+"PO-Revision-Date: 2013-09-25 08:33-0400\n" -+"Last-Translator: gcintra \n" - "Language-Team: Brazilian Portuguese \n" --"Language: pt_BR\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: pt-BR\n" - "Plural-Forms: nplurals=2; plural=(n > 1);\n" --"X-Generator: Poedit 1.5.5\n" -+"X-Generator: Zanata 3.1.2\n" - "X-Project-Style: gnome\n" - - #: ../data/gnome-classic.desktop.in.h:1 -@@ -52,7 +53,6 @@ msgid "" - msgstr "" - "Esta chave sobrescreve a chave em org.gnome.mutter ao executar GNOME Shell." - --# Precedentes no mutter e no gnome-shell - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 - msgid "Enable edge tiling when dropping windows on screen edges" - msgstr "" -@@ -335,226 +335,3 @@ msgstr "Tela" - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" - msgstr "Configurações de tela" -- --#~ msgid "The application icon mode." --#~ msgstr "O modo de ícone do aplicativo." -- --#~ msgid "" --#~ "Configures how the windows are shown in the switcher. Valid possibilities " --#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" --#~ "only' (shows only the application icon) or 'both'." --#~ msgstr "" --#~ "Configura como as janelas são mostradas no alternador. Possibilidades " --#~ "válidas são \"thumbnail-only\" (mostra uma miniatura da janela), \"app-" --#~ "icon-only\" (mostra somente o ícone do aplicativo) ou \"both\" (ambos)." -- --#~ msgid "Drag here to add favorites" --#~ msgstr "Arraste aqui para adicionar favoritos" -- --#~ msgid "New Window" --#~ msgstr "Nova janela" -- --#~ msgid "Quit Application" --#~ msgstr "Fechar aplicativo" -- --#~ msgid "Remove from Favorites" --#~ msgstr "Remover dos favoritos" -- --#~ msgid "Position of the dock" --#~ msgstr "Posição do dock" -- --#~ msgid "" --#~ "Sets the position of the dock in the screen. Allowed values are 'right' " --#~ "or 'left'" --#~ msgstr "" --#~ "Define a posição do dock na tela. Os valores permitidos são \"right\" ou " --#~ "\"left\"" -- --#~ msgid "Icon size" --#~ msgstr "Tamanho do ícone" -- --#~ msgid "Sets icon size of the dock." --#~ msgstr "Define o tamanho do ícone do dock." -- --#~ msgid "Enable/disable autohide" --#~ msgstr "Habilitar/desabilitar ocultar automaticamente" -- --#~ msgid "Autohide effect" --#~ msgstr "Efeito de ocultar automaticamente" -- --#~ msgid "" --#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' " --#~ "and 'move'" --#~ msgstr "" --#~ "Define o efeito de ocultar dock. Os valores permitidos são \"resize\", " --#~ "\"rescale\" e \"move\"" -- --#~ msgid "Autohide duration" --#~ msgstr "Duração do ocultar automaticamente" -- --#~ msgid "Sets the time duration of the autohide effect." --#~ msgstr "Define o tempo de duração do efeito de ocultar automaticamente." -- --#~ msgid "Monitor" --#~ msgstr "Monitor" -- --#~ msgid "" --#~ "Sets monitor to display dock in. The default value (-1) is the primary " --#~ "monitor." --#~ msgstr "" --#~ "Configura o monitor para mostrar encaixe. O valor padrão (-1) é o monitor " --#~ "primário." -- --#~ msgid "%s is away." --#~ msgstr "%s está ausente." -- --#~ msgid "%s is offline." --#~ msgstr "%s está desconectado." -- --#~ msgid "%s is online." --#~ msgstr "%s está conectado." -- --#~ msgid "%s is busy." --#~ msgstr "%s está ocupado." -- --#~ msgid "Devices" --#~ msgstr "Dispositivos" -- --#~ msgid "Bookmarks" --#~ msgstr "Marcadores" -- --#~ msgid "Network" --#~ msgstr "Rede" -- --#~ msgid "File System" --#~ msgstr "Sistema de arquivos" -- --#~ msgid "The alt tab behaviour." --#~ msgstr "O comportamento do alt tab." -- --#~ msgid "" --#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and " --#~ "workspace_icons. See the configuration dialogs for details." --#~ msgstr "" --#~ "Define o comportamento do Alt-Tab. Valores possíveis são: all_thumbnails " --#~ "e workspace_icons. Veja os diálogos de configuração para mais detalhes." -- --#~ msgid "" --#~ "This mode presents all applications from all workspaces in one selection " --#~ "list. Instead of using the application icon of every window, it uses " --#~ "small thumbnails resembling the window itself." --#~ msgstr "" --#~ "Esse modo apresenta todos os aplicativos de todos os espaços de trabalho " --#~ "em uma lista de seleção. Em vez de usar o ícone de aplicativo de cada " --#~ "janela, usa pequenas miniaturas com a aparência da própria janela." -- --#~ msgid "Workspace & Icons" --#~ msgstr "Espaço de trabalho & ícones" -- --#~ msgid "" --#~ "This mode let's you switch between the applications of your current " --#~ "workspace and gives you additionally the option to switch to the last " --#~ "used application of your previous workspace. This is always the last " --#~ "symbol in the list and is segregated by a separator/vertical line if " --#~ "available. \n" --#~ "Every window is represented by its application icon." --#~ msgstr "" --#~ "Esse modo permite que você alterne entre os aplicativos do seu espaço de " --#~ "trabalho atual e além disso lhe dá a opção de alternar para a última " --#~ "aplicação utilizada do seu espaço de trabalho anterior. Essa é sempre o " --#~ "último símbolo na lista e é segregada através de um separador/linha " --#~ "vertical quando disponível.\n" --#~ "Cada janela é representada pelo seu ícone de aplicativo." -- --#~ msgid "Move current selection to front before closing the popup" --#~ msgstr "Move a seleção atual para a frente antes de fechar a popup" -- --#~ msgid "" --#~ "The Alternate Tab can be used in different modes, that affect the way " --#~ "windows are chosen and presented." --#~ msgstr "" --#~ "O tab alternativo pode ser usado em modos diferentes que afetam a maneira " --#~ "como as janelas são escolhidas e apresentadas." -- --#~ msgid "Configure display settings..." --#~ msgstr "Alterar configurações de exibição..." -- --#~ msgid "" --#~ "This is the first time you use the Alternate Tab extension. \n" --#~ "Please choose your preferred behaviour:\n" --#~ "\n" --#~ "All & Thumbnails:\n" --#~ " This mode presents all applications from all workspaces in one " --#~ "selection \n" --#~ " list. Instead of using the application icon of every window, it uses " --#~ "small \n" --#~ " thumbnails resembling the window itself. \n" --#~ "\n" --#~ "Workspace & Icons:\n" --#~ " This mode let's you switch between the applications of your current \n" --#~ " workspace and gives you additionally the option to switch to the last " --#~ "used \n" --#~ " application of your previous workspace. This is always the last " --#~ "symbol in \n" --#~ " the list and is segregated by a separator/vertical line if " --#~ "available. \n" --#~ " Every window is represented by its application icon. \n" --#~ "\n" --#~ "If you whish to revert to the default behavior for the Alt-Tab switcher, " --#~ "just\n" --#~ "disable the extension from extensions.gnome.org or the Advanced Settings " --#~ "application." --#~ msgstr "" --#~ "Esta é a primeira vez que você usa a extensão Alternate Tab. \n" --#~ "Por favor, escolha seu comportamento preferido:\n" --#~ "\n" --#~ "All & miniaturas:\n" --#~ " Este modo apresenta todos os aplicativos de todos os espaços de " --#~ "trabalho em\n" --#~ " uma lista. Ao invés de usar o ícone do aplicativo de cada janela, ele " --#~ "usa\n" --#~ " pequenas miniaturas assemelhando-se a janela própria. \n" --#~ "\n" --#~ "Espaço de trabalho & ícones:\n" --#~ " Este modo permite que você alterne entre os aplicativos do seu espaço " --#~ "de trabalho\n" --#~ " atual e dá a você além da opção para mudar para o último aplicativo " --#~ "usado em seu\n" --#~ " espaço de trabalho anterior. Este é sempre o último símbolo na lista " --#~ "e separado\n" --#~ " por uma linha separadora/vertical se disponível. \n" --#~ " Cada janela é representada por seu ícone de aplicativo. \n" --#~ "\n" --#~ "Se você deseja reverter para o comportamento padrão a partir do " --#~ "alternador de Alt-Tab, apenas desative a extensão de extensions.gnome.org " --#~ "ou nas configurações avançadas do aplicativo." -- --#~ msgid "Alt Tab Behaviour" --#~ msgstr "Comportamento do Alt Tab" -- --#~ msgid "Cancel" --#~ msgstr "Cancelar" -- --#~ msgid "Ask the user for a default behaviour if true." --#~ msgstr "Pergunte ao usuário por um comportamento padrão se marcado." -- --#~ msgid "Indicates if Alternate Tab is newly installed" --#~ msgstr "Indica se o alternar com Tab for recém-instalado" -- --#~ msgid "Available" --#~ msgstr "Disponível" -- --#~ msgid "Busy" --#~ msgstr "Ocupado" -- --#~ msgid "My Account" --#~ msgstr "Minha conta" -- --#~ msgid "Lock Screen" --#~ msgstr "Bloquear tela" -- --#~ msgid "Switch User" --#~ msgstr "Trocar de usuário" -- --#~ msgid "Log Out..." --#~ msgstr "Encerrar sessão..." -diff -up gnome-shell-extensions-3.8.4/po/ru.po.translations gnome-shell-extensions-3.8.4/po/ru.po ---- gnome-shell-extensions-3.8.4/po/ru.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/ru.po 2013-12-12 00:35:58.471258656 -0500 -@@ -3,23 +3,23 @@ - # This file is distributed under the same license as the gnome-shell-extensions package. - # Stas Solovey , 2011, 2012. - # Yuri Myasoedov , 2011, 2012, 2013. --# -+# ypoyarko , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" - "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" - "shell&keywords=I18N+L10N&component=extensions\n" - "POT-Creation-Date: 2013-02-08 12:25+0000\n" --"PO-Revision-Date: 2013-03-07 09:32+0400\n" --"Last-Translator: Yuri Myasoedov \n" -+"PO-Revision-Date: 2013-10-31 10:34-0400\n" -+"Last-Translator: ypoyarko \n" - "Language-Team: русский \n" --"Language: ru\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" --"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" --"X-Generator: Gtranslator 2.91.5\n" -+"Language: ru\n" -+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" -+"X-Generator: Zanata 3.1.2\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -38,6 +38,26 @@ msgstr "Классический GNOME S - msgid "Window management and application launching" - msgstr "Управление окнами и запуск приложений" - -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "Прикреплять модальное диалоговое окно к родительскому окну" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -+msgid "" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "" -+"Этот ключ переопределяет ключ в org.gnome.mutter при запуске GNOME Shell." -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "" -+"Включить автоматическое изменение размеров окон при перемещении окон к краям " -+"экрана" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "Рабочие места только на основном мониторе" -+ - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" - msgstr "Только миниатюры" -@@ -59,15 +79,15 @@ msgid "Show only windows in the current - msgstr "Отображать окна только текущей рабочей области" - - #. add the new entries --#: ../extensions/alternative-status-menu/extension.js:144 -+#: ../extensions/alternative-status-menu/extension.js:125 - msgid "Suspend" - msgstr "Ждущий режим" - --#: ../extensions/alternative-status-menu/extension.js:147 -+#: ../extensions/alternative-status-menu/extension.js:128 - msgid "Hibernate" - msgstr "Спящий режим" - --#: ../extensions/alternative-status-menu/extension.js:150 -+#: ../extensions/alternative-status-menu/extension.js:131 - msgid "Power Off" - msgstr "Выключить" - -@@ -87,17 +107,15 @@ msgstr "Разрешить исполь� - msgid "Control the visibility of the Hibernate menu item" - msgstr "Показывать ли в меню пункт «Спящий режим»" - --#: ../extensions/apps-menu/extension.js:50 -+#: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" - msgstr "Обзор" - --#: ../extensions/apps-menu/extension.js:103 --#| msgid "Add to Favorites" -+#: ../extensions/apps-menu/extension.js:113 - msgid "Favorites" - msgstr "Избранное" - --#: ../extensions/apps-menu/extension.js:197 --#| msgid "Application" -+#: ../extensions/apps-menu/extension.js:278 - msgid "Applications" - msgstr "Приложения" - -@@ -207,25 +225,25 @@ msgstr "" - "нижней, как это делается по умолчанию. Изменение этого параметра требует " - "перезапуска Shell, чтобы изменение вступило в силу." - --#: ../extensions/places-menu/extension.js:57 -+#: ../extensions/places-menu/extension.js:77 - msgid "Places" - msgstr "Места" - --#: ../extensions/places-menu/placeDisplay.js:48 -+#: ../extensions/places-menu/placeDisplay.js:56 - #, c-format - msgid "Failed to launch \"%s\"" - msgstr "Не удалось запустить «%s»" - -+#: ../extensions/places-menu/placeDisplay.js:98 - #: ../extensions/places-menu/placeDisplay.js:121 --msgid "Home" --msgstr "Домашняя папка" -- --#: ../extensions/places-menu/placeDisplay.js:195 - msgid "Computer" - msgstr "Компьютер" - - #: ../extensions/places-menu/placeDisplay.js:199 --#| msgid "Browse network" -+msgid "Home" -+msgstr "Домашняя папка" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 - msgid "Browse Network" - msgstr "Обзор сети" - -@@ -252,10 +270,11 @@ msgstr "Когда группирова� - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 - msgid "" - "Decides when to group windows from the same application on the window list. " --"Possible values are \"never\" and \"always\"." -+"Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"Решает, когда группировать окна одного и того же приложения в списке окон. " --"Возможные значения: «never» — никогда; «always» — всегда." -+"Определяет, когда группировать окна одного и того же приложения в списке " -+"окон. Возможные значения: «never» — никогда; «auto» — автоматически; " -+"«always» — всегда." - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -266,6 +285,10 @@ msgid "Never group windows" - msgstr "Никогда не группировать окна" - - #: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "Группировать окна, если место ограничено" -+ -+#: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" - msgstr "Всегда группировать окна" - -@@ -309,97 +332,3 @@ msgstr "Экран" - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" - msgstr "Параметры экрана" -- --#~ msgid "Devices" --#~ msgstr "Устройства" -- --#~ msgid "Bookmarks" --#~ msgstr "Закладки" -- --#~ msgid "Network" --#~ msgstr "Сеть" -- --#~ msgid "File System" --#~ msgstr "Файловая система" -- --#~ msgid "The application icon mode." --#~ msgstr "Режим значков приложения." -- --#~ msgid "" --#~ "Configures how the windows are shown in the switcher. Valid possibilities " --#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" --#~ "only' (shows only the application icon) or 'both'." --#~ msgstr "" --#~ "Устанавливает способ отображения окна при переключении. Возможные " --#~ "значения: «thumbnail-only» (показывать миниатюру окна), «app-icon-" --#~ "only» (показывать только значок приложения), или «both» (показывать " --#~ "миниатюру окна и значок приложения)." -- --#~ msgid "Drag here to add favorites" --#~ msgstr "Перетащите, чтобы добавить в избранное" -- --#~ msgid "New Window" --#~ msgstr "Создать окно" -- --#~ msgid "Quit Application" --#~ msgstr "Закрыть приложение" -- --#~ msgid "Remove from Favorites" --#~ msgstr "Удалить из избранного" -- --#~ msgid "Position of the dock" --#~ msgstr "Расположение док-панели" -- --#~ msgid "" --#~ "Sets the position of the dock in the screen. Allowed values are 'right' " --#~ "or 'left'" --#~ msgstr "" --#~ "Устанавливает положение док-панели на экране. Возможные значения: «right» " --#~ "или «left»" -- --#~ msgid "Icon size" --#~ msgstr "Размер значков" -- --#~ msgid "Sets icon size of the dock." --#~ msgstr "Устанавливает размер значка док-панели." -- --#~ msgid "Enable/disable autohide" --#~ msgstr "Включить/выключить автоскрытие" -- --#~ msgid "Autohide effect" --#~ msgstr "Эффект автоскрытия" -- --#~ msgid "" --#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' " --#~ "and 'move'" --#~ msgstr "" --#~ "Устанавливает эффект скрытия док-панели. Возможные значения: «resize», " --#~ "«rescale» и «move»" -- --#~ msgid "Autohide duration" --#~ msgstr "Таймер автоскрытия" -- --#~ msgid "Sets the time duration of the autohide effect." --#~ msgstr "Устанавливает продолжительность эффекта автоскрытия." -- --#~ msgid "Monitor" --#~ msgstr "Монитор" -- --#~ msgid "" --#~ "Sets monitor to display dock in. The default value (-1) is the primary " --#~ "monitor." --#~ msgstr "" --#~ "Устанавливает монитор для отображения док-панели. Значением по умолчанию " --#~ "(-1) является основной монитор." -- --#~ msgid "%s is away." --#~ msgstr "%s отошёл." -- --#~ msgid "%s is offline." --#~ msgstr "%s не в сети." -- --#~ msgid "%s is online." --#~ msgstr "%s в сети." -- --#~ msgid "%s is busy." --#~ msgstr "%s занят." -diff -up gnome-shell-extensions-3.8.4/po/ta.po.translations gnome-shell-extensions-3.8.4/po/ta.po ---- gnome-shell-extensions-3.8.4/po/ta.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/ta.po 2013-12-12 00:35:58.471258656 -0500 -@@ -2,21 +2,20 @@ - # Copyright (C) 2013 gnome-shell-extensions's COPYRIGHT HOLDER - # This file is distributed under the same license as the gnome-shell-extensions package. - # தங்கமணி அருண் , 2013. --# - msgid "" - msgstr "" --"Project-Id-Version: gnome-shell-extensions master\n" --"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" --"shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2013-08-24 12:30+0000\n" --"PO-Revision-Date: 2013-09-03 16:24+0530\n" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-09-03 06:54-0400\n" - "Last-Translator: Shantha kumar \n" - "Language-Team: Tamil \n" --"Language: ta\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"X-Generator: Poedit 1.5.4\n" -+"Language: ta\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=2; plural=(n != 1)\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 -@@ -43,12 +42,13 @@ msgstr "சேய் உரையாட� - msgid "" - "This key overrides the key in org.gnome.mutter when running GNOME Shell." - msgstr "" --"இந்த திறப்பானது GNOME செல்லை இயக்கும் போது, org.gnome.mutter இல் உள்ள திறப்பைப் " --"புறக்கணிக்கிறது." -+"இந்த திறப்பானது GNOME செல்லை இயக்கும் போது, org.gnome.mutter இல் உள்ள " -+"திறப்பைப் புறக்கணிக்கிறது." - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 - msgid "Enable edge tiling when dropping windows on screen edges" --msgstr "சாளரங்களை திரை விளிம்புகளில் விடும் போது, விளிம்பு சட்டமாக்கலை செயற்படுத்து" -+msgstr "" -+"சாளரங்களை திரை விளிம்புகளில் விடும் போது, விளிம்பு சட்டமாக்கலை செயற்படுத்து" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 - msgid "Workspaces only on primary monitor" -@@ -124,8 +124,8 @@ msgid "" - "A list of strings, each containing an application id (desktop file name), " - "followed by a colon and the workspace number" - msgstr "" --"பயன்பாட்டு id (பணிமேடை கோப்பு பெயர்), அதைத்தொடர்ந்து ஒரு முக்காற் குறி மற்றும் பணியிட " --"எண் ஆகியவற்றைக் கொண்டிருக்கும் சரங்களின் பட்டியல்" -+"பயன்பாட்டு id (பணிமேடை கோப்பு பெயர்), அதைத்தொடர்ந்து ஒரு முக்காற் குறி " -+"மற்றும் பணியிட எண் ஆகியவற்றைக் கொண்டிருக்கும் சரங்களின் பட்டியல்" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" -@@ -174,8 +174,8 @@ msgid "" - "If not empty, it contains the text that will be shown when clicking on the " - "panel." - msgstr "" --"காலியாக இல்லாவிட்டால், பலகத்தின் மீது சொடுக்கும் போது காண்பிக்கப்படும் உரையைக் " --"கொண்டிருக்கும்." -+"காலியாக இல்லாவிட்டால், பலகத்தின் மீது சொடுக்கும் போது காண்பிக்கப்படும் " -+"உரையைக் கொண்டிருக்கும்." - - #. TRANSLATORS: Example is the name of the extension, should not be - #. translated -@@ -185,8 +185,9 @@ msgid "" - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." - msgstr "" --"செல்லுக்கான சிறப்பாக செயல்படும் நீட்சிகளை எப்படி திறம்பட கட்டமைப்பது என்பதைக் காண்பிப்பதே " --"Example இன் குறிக்கோளாகும் மேலும் அதுவும் மிகக் குறைந்த செயலம்சத்தையே கொண்டுள்ளது.\n" -+"செல்லுக்கான சிறப்பாக செயல்படும் நீட்சிகளை எப்படி திறம்பட கட்டமைப்பது " -+"என்பதைக் காண்பிப்பதே Example இன் குறிக்கோளாகும் மேலும் அதுவும் மிகக் குறைந்த " -+"செயலம்சத்தையே கொண்டுள்ளது.\n" - "இருப்பினும், வாழ்த்துச்செய்தியை தனிப்பயனாக்கம் செய்யமுடியும்." - - #: ../extensions/example/prefs.js:36 -@@ -203,10 +204,10 @@ msgid "" - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." - msgstr "" --"திரையின் தன்மை விகிதத்திற்கு ஏற்ப தகவமைப்பதன் மூலமும் சாளர சிறுபடங்களை உட்கொண்டிருக்கும் " --"பெட்டியை மேலும் குறைப்பதற்காக அவற்றை வகைபிரித்தமைப்பதன் மூலமும் சாளர சிறுபடங்களை " --"வைப்பதற்கு அதிக திரையைப் பயன்படுத்தவும். இந்த அமைவு இயல்பான இடவமைத்தல் உத்திக்கு மட்டுமே " --"பொருந்தும்." -+"திரையின் தன்மை விகிதத்திற்கு ஏற்ப தகவமைப்பதன் மூலமும் சாளர சிறுபடங்களை " -+"உட்கொண்டிருக்கும் பெட்டியை மேலும் குறைப்பதற்காக அவற்றை வகைபிரித்தமைப்பதன் " -+"மூலமும் சாளர சிறுபடங்களை வைப்பதற்கு அதிக திரையைப் பயன்படுத்தவும். இந்த அமைவு " -+"இயல்பான இடவமைத்தல் உத்திக்கு மட்டுமே பொருந்தும்." - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" -@@ -218,9 +219,10 @@ msgid "" - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." - msgstr "" --"true என இருப்பின், சாளர தலைப்புகளை அடிப்பகுதியில் வைக்கும் செல்லின் முன்னிருப்பான " --"குணத்தைப் புறக்கணித்து, சாளர தலைப்புகளை அந்தந்த சிறுபடத்தின் மேல் பகுதியில் வைக்கும். இந்த " --"அமைவில் மாற்றம் செய்தால், மாற்றம் விளைவை ஏற்படுத்த செல்லை மறுதொடக்கம் செய்ய வேண்டும்." -+"true என இருப்பின், சாளர தலைப்புகளை அடிப்பகுதியில் வைக்கும் செல்லின் " -+"முன்னிருப்பான குணத்தைப் புறக்கணித்து, சாளர தலைப்புகளை அந்தந்த சிறுபடத்தின் " -+"மேல் பகுதியில் வைக்கும். இந்த அமைவில் மாற்றம் செய்தால், மாற்றம் விளைவை " -+"ஏற்படுத்த செல்லை மறுதொடக்கம் செய்ய வேண்டும்." - - #: ../extensions/places-menu/extension.js:77 - msgid "Places" -@@ -269,9 +271,9 @@ msgid "" - "Decides when to group windows from the same application on the window list. " - "Possible values are \"never\", \"auto\" and \"always\"." - msgstr "" --"சாளர பட்டியலில், ஒரே பயன்பாட்டுக்கு உரிய சாளரங்களை எப்போது குழுவாக்க வேண்டும் என " --"முடிவுச்செய்கிறது. சாத்தியமான மதிப்புகள் \"ஒருபோதும் வேண்டாம்\", \"தானாக\" மற்றும் " --"\"எப்பொழுதும்\"." -+"சாளர பட்டியலில், ஒரே பயன்பாட்டுக்கு உரிய சாளரங்களை எப்போது குழுவாக்க " -+"வேண்டும் என முடிவுச்செய்கிறது. சாத்தியமான மதிப்புகள் \"ஒருபோதும் வேண்டாம்\", " -+"\"தானாக\" மற்றும் \"எப்பொழுதும்\"." - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -329,33 +331,3 @@ msgstr "காட்சி" - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" - msgstr "காட்சி அமைப்புகள்" -- --#~ msgid "Close" --#~ msgstr "மூடு" -- --#~ msgid "Unminimize" --#~ msgstr "குறுக்கல் நீக்கு" -- --#~ msgid "Minimize" --#~ msgstr "சிறிதாக்கு" -- --#~ msgid "Unmaximize" --#~ msgstr "பெரிதாக்கல் நீக்கு" -- --#~ msgid "Maximize" --#~ msgstr "பெரிதாக்கு" -- --#~ msgid "Minimize all" --#~ msgstr "அனைத்தையும் சிறிதாக்கு" -- --#~ msgid "Unminimize all" --#~ msgstr "அனைத்தையும் குறுக்கல் நீக்கு" -- --#~ msgid "Maximize all" --#~ msgstr "அனைத்தையும் பெரிதாக்கு" -- --#~ msgid "Unmaximize all" --#~ msgstr " அனைத்தையும் பெரிதாக்கல் நீக்கு" -- --#~ msgid "Close all" --#~ msgstr "அனைத்தையும் மூடு" -diff -up gnome-shell-extensions-3.8.4/po/te.po.translations gnome-shell-extensions-3.8.4/po/te.po ---- gnome-shell-extensions-3.8.4/po/te.po.translations 2013-07-16 07:12:50.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/te.po 2013-12-12 00:35:58.472258653 -0500 -@@ -2,271 +2,330 @@ - # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER - # This file is distributed under the same license as the gnome-shell-extensions package. - # Praveen Illa , 2011. --# -+# Krishnababu Krothapalli , 2013. - msgid "" - msgstr "" --"Project-Id-Version: gnome-shell-extensions master\n" --"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" --"shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2011-09-19 17:46+0000\n" --"PO-Revision-Date: 2011-09-25 15:01+0530\n" --"Last-Translator: Praveen Illa \n" --"Language-Team: Telugu \n" -+"Project-Id-Version: PACKAGE VERSION\n" -+"Report-Msgid-Bugs-To: \n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-10-01 04:16-0400\n" -+"Last-Translator: Krishnababu Krothapalli \n" -+"Language-Team: Telugu \n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: te\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../extensions/alternative-status-menu/extension.js:44 --msgid "Notifications" --msgstr "ప్రకటనలు" -- --#: ../extensions/alternative-status-menu/extension.js:52 --msgid "Online Accounts" --msgstr "ఆన్‌లైన్ ఖాతాలు" -- --#: ../extensions/alternative-status-menu/extension.js:56 --msgid "System Settings" --msgstr "వ్యవస్థ అమరికలు" -- --#: ../extensions/alternative-status-menu/extension.js:63 --msgid "Lock Screen" --msgstr "తెరకు తాళంవేయి" -- --#: ../extensions/alternative-status-menu/extension.js:68 --msgid "Switch User" --msgstr "వాడుకరిని మార్చు" -- --#: ../extensions/alternative-status-menu/extension.js:73 --msgid "Log Out..." --msgstr "నిష్క్రమించు..." -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "గ్నోమ్ క్లాసిక్" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "ఈ సెషన్ గ్నోమ్‌ క్లాసిక్ లోనికి లాగ్ చేస్తుంది" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "గ్నోమ్ షెల్ క్లాసిక్" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "కిటికీ నిర్వాహణ మరియు అనువర్తనము ప్రారంభించుట" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "పేరెంట్ విండోనకు మోడల్ డైలాగ్ అనుబందించు" - --#: ../extensions/alternative-status-menu/extension.js:81 --msgid "Suspend" --msgstr "తాత్కాలికంగా నిలిపివేయి" -- --#: ../extensions/alternative-status-menu/extension.js:87 --msgid "Hibernate" --msgstr "సుప్తావస్థ" -- --#: ../extensions/alternative-status-menu/extension.js:93 --msgid "Power Off..." --msgstr "విద్యుత్ ఆపు..." -- --#: ../extensions/alternate-tab/extension.js:44 -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" --"This is the first time you use the Alternate Tab extension. \n" --"Please choose your preferred behaviour:\n" --"\n" --"All & Thumbnails:\n" --" This mode presents all applications from all workspaces in one " --"selection \n" --" list. Instead of using the application icon of every window, it uses " --"small \n" --" thumbnails resembling the window itself. \n" --"\n" --"Workspace & Icons:\n" --" This mode let's you switch between the applications of your current \n" --" workspace and gives you additionally the option to switch to the last " --"used \n" --" application of your previous workspace. This is always the last symbol " --"in \n" --" the list and is segregated by a separator/vertical line if available. \n" --" Every window is represented by its application icon. \n" --"\n" --"Native:\n" --" This mode is the native GNOME 3 behaviour or in other words: Clicking \n" --" native switches the Alternate Tab extension off. \n" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." - msgstr "" -+"గ్నోమ్ షెల్ నందు నడుచునప్పుడు ఈ కీ org.gnome.mutter నందలి కీను వోవర్‌రైడ్ " -+"చేయును." - --#: ../extensions/alternate-tab/extension.js:269 --msgid "Alt Tab Behaviour" --msgstr "" -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "తెర అంచులనందు విండోలను విడువునప్పుడు ఎడ్జ్ టైటిలింగ్ చేతనం చేయి" - --#: ../extensions/alternate-tab/extension.js:285 --msgid "All & Thumbnails" --msgstr "అన్నీ & చిరుచిత్రాలు" -- --#: ../extensions/alternate-tab/extension.js:292 --msgid "Workspace & Icons" --msgstr "కార్యక్షేత్రం & ప్రతీకలు" -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "ప్రాధమిక మానిటర్ పైని కార్యక్షేత్రాలు మాత్రమే" - --#: ../extensions/alternate-tab/extension.js:299 --msgid "Native" --msgstr "" -+#: ../extensions/alternate-tab/prefs.js:20 -+msgid "Thumbnail only" -+msgstr "థంబ్‌నెయిల్ మాత్రమే" - --#: ../extensions/alternate-tab/extension.js:306 --msgid "Cancel" --msgstr "రద్దుచేయి" -+#: ../extensions/alternate-tab/prefs.js:21 -+msgid "Application icon only" -+msgstr "అనువర్తనం ప్రతిమ మాత్రమే" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1 --msgid "Ask the user for a default behaviour if true." --msgstr "" -+#: ../extensions/alternate-tab/prefs.js:22 -+msgid "Thumbnail and application icon" -+msgstr "థంబ్‌నెయిల్ మరియు అనువర్తనం ప్రతిమ" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2 --msgid "Indicates if Alternate Tab is newly installed" --msgstr "" -+#: ../extensions/alternate-tab/prefs.js:37 -+msgid "Present windows as" -+msgstr "విండోలు ఇలా ప్రజంట్ చేయి" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3 --msgid "" --"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and " --"workspace_icons." --msgstr "" -+#: ../extensions/alternate-tab/prefs.js:62 -+msgid "Show only windows in the current workspace" -+msgstr "‌విండోలను ప్రస్తుత పనిస్థలం నందు మాత్రమే చూపుము" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4 --msgid "The alt tab behaviour." --msgstr "" -+#. add the new entries -+#: ../extensions/alternative-status-menu/extension.js:125 -+msgid "Suspend" -+msgstr "తాత్కాలికంగా నిలిపివేయి" - --#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 --msgid "" --"A list of strings, each containing an application id (desktop file name), " --"followed by a colon and the workspace number" --msgstr "" -+#: ../extensions/alternative-status-menu/extension.js:128 -+msgid "Hibernate" -+msgstr "సుప్తావస్థ" - --#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 -+#: ../extensions/alternative-status-menu/extension.js:131 -+msgid "Power Off" -+msgstr "విద్యుత్ ఆపు" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1 -+msgid "Enable suspending" -+msgstr "రద్దుచేయుట చేతనంచేయి" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2 -+msgid "Control the visibility of the Suspend menu item" -+msgstr "రద్దుచేసిన మెనూ అంశం కనిపించుటను నియంత్రించు" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3 -+msgid "Enable hibernating" -+msgstr "హెబర్నేటింగ్ చేతనంచేయి" -+ -+#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4 -+msgid "Control the visibility of the Hibernate menu item" -+msgstr "హైబర్నేట్ మెనూ అంశం కనిపించుటకు నియంత్రించు" -+ -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "కార్యకలాపాల పై పై పరిశీలనను చూపించు" -+ -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "ఇష్టాలు" -+ -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "అనువర్తనాలు" -+ -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 - msgid "Application and workspace list" - msgstr "అనువర్తన మరియు కార్యక్షేత్రాల జాబితా" - --#: ../extensions/dock/extension.js:486 --msgid "Drag here to add favorites" --msgstr "ఇష్టాంశాలకు జతచేయడానికి ఇక్కడ లాగి వదలండి" -- --#: ../extensions/dock/extension.js:820 --msgid "New Window" --msgstr "కొత్త విండో" -- --#: ../extensions/dock/extension.js:822 --msgid "Quit Application" --msgstr "అనువర్తనము నిష్క్రమించు" -- --#: ../extensions/dock/extension.js:827 --msgid "Remove from Favorites" --msgstr "ఇష్టాంశాల నుండి తీసివేయి" -- --#: ../extensions/dock/extension.js:828 --msgid "Add to Favorites" --msgstr "ఇష్టాంశాలకు జతచేయి" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1 --msgid "Autohide duration" --msgstr "స్వయంగాదాగు నిడివి" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2 --msgid "Autohide effect" --msgstr "స్వయందాగు ప్రభావం" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3 --msgid "Enable/disable autohide" --msgstr "స్వయందాగుటను చేతనపరుచు/అచేతనపరుచు" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4 --msgid "Icon size" --msgstr "ప్రతీక పరిమాణం" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5 --msgid "Position of the dock" --msgstr "" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6 --msgid "Sets icon size of the dock." --msgstr "" -- --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7 -+#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 - msgid "" --"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'" -+"A list of strings, each containing an application id (desktop file name), " -+"followed by a colon and the workspace number" - msgstr "" -+"స్ట్రింగ్స్ జాబితా, ప్రతిదీ వొక అనువర్తనం ఐడి (డిస్కుటాప్ ఫైల్ పేరు)ను, " -+"వెంటనే కోలన్ మరియు పనిస్థలం సంఖ్యతో" - --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8 --msgid "" --"Sets the position of the dock in the screen. Allowed values are 'right' or " --"'left'" --msgstr "" -+#: ../extensions/auto-move-windows/prefs.js:55 -+msgid "Application" -+msgstr "అనువర్తనం" -+ -+#: ../extensions/auto-move-windows/prefs.js:64 -+#: ../extensions/auto-move-windows/prefs.js:106 -+msgid "Workspace" -+msgstr "పనిస్థలం" -+ -+#: ../extensions/auto-move-windows/prefs.js:80 -+msgid "Add rule" -+msgstr "నియమాన్ని జతచేయి" -+ -+#: ../extensions/auto-move-windows/prefs.js:94 -+msgid "Create new matching rule" -+msgstr "పోల్చే నియమం కొత్తది సృష్టించు" -+ -+#: ../extensions/auto-move-windows/prefs.js:98 -+msgid "Add" -+msgstr "చేర్చు" -+ -+#: ../extensions/drive-menu/extension.js:72 -+#, c-format -+msgid "Ejecting drive '%s' failed:" -+msgstr "'%s' డ్రైవ్ బయటకునెట్టుట విఫలమైంది:" - --#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9 --msgid "Sets the time duration of the autohide effect." --msgstr "స్వయందాగు ప్రభావం యొక్క సమయ పరిధిని అమర్చును." -+#: ../extensions/drive-menu/extension.js:89 -+msgid "Removable devices" -+msgstr "తీసివేయదగ్గ పరికరాలు" -+ -+#: ../extensions/drive-menu/extension.js:106 -+msgid "Open File" -+msgstr "ఫైలు తెరువు" - --#: ../extensions/example/extension.js:11 -+#: ../extensions/example/extension.js:17 - msgid "Hello, world!" - msgstr "హలో, ప్రపంచమా!" - --#: ../extensions/gajim/extension.js:227 --#, c-format --msgid "%s is away." --msgstr "%s దూరంగావున్నారు." -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 -+msgid "Alternative greeting text." -+msgstr "ప్రత్యామ్నాయ గ్రీటింగ్ పాఠం." - --#: ../extensions/gajim/extension.js:230 --#, c-format --msgid "%s is offline." --msgstr "%s ఆఫ్‌లైనులోవున్నారు." -- --#: ../extensions/gajim/extension.js:233 --#, c-format --msgid "%s is online." --msgstr "%s ఆన్‌లైనులోవున్నారు." -+#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 -+msgid "" -+"If not empty, it contains the text that will be shown when clicking on the " -+"panel." -+msgstr "" -+"ఒకవేళ ఖాళీ కాకపోతే, అది పానల్ పైన నొక్కినప్పుడు చూపించబడు పాఠం కలిగివుంటుంది." -+"" - --#: ../extensions/gajim/extension.js:236 --#, c-format --msgid "%s is busy." --msgstr "%s తీరికలేకుండావున్నారు." -+#. TRANSLATORS: Example is the name of the extension, should not be -+#. translated -+#: ../extensions/example/prefs.js:30 -+msgid "" -+"Example aims to show how to build well behaved extensions for the Shell and " -+"as such it has little functionality on its own.\n" -+"Nevertheless it's possible to customize the greeting message." -+msgstr "" -+"ఉదాహరణ అనునది సరిగా ప్రవర్తించే పొడిగింతలను షెల్ కొరకు యెలా నిర్మించాలో " -+"చూపటానికి వుద్దేశించింది అది కొంత దాని స్వంత ఫంక్షనాలిటీను కలిగివుంటుంది.\n" -+"అయితే అభినందనలు తెలియజేసే సందేశాన్ని మలచుకోవడం సాధ్యమే." -+ -+#: ../extensions/example/prefs.js:36 -+msgid "Message:" -+msgstr "సందేశం:" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 --msgid "" --"If true, place window captions on top the respective thumbnail, overriding " --"shell default of placing it at the bottom. Changing this setting requires " --"restarting the shell to have any effect." --msgstr "" -+msgid "Use more screen for windows" -+msgstr "విండోల కొరకు ఎక్కువ తెరను వాడు" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 --msgid "Place window captions on top" -+msgid "" -+"Try to use more screen for placing window thumbnails by adapting to screen " -+"aspect ratio, and consolidating them further to reduce the bounding box. " -+"This setting applies only with the natural placement strategy." - msgstr "" -+"స్క్రీన్ ఏస్పెక్ట్ రేషియో ను ఆపాదించుకుంటూ విండో థంబ్‌నెయిల్స్ వుంచుటకు " -+"మరింత స్క్రీన్‌ వుపయోగించుటకు ప్రయత్నించుము, మరియు వాటిని ఇంకా వొకటిగా " -+"కూర్చుతూ బౌండింగ్ బాక్స్ తగ్గించు. ఈ అమర్పులు నాచురల్ ప్లేస్‌మెంట్ స్ట్రాటజీ " -+"తో మాత్రమే వర్తించబడును." - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 --msgid "" --"The algorithm used to layout thumbnails in the overview. 'grid' to use the " --"default grid based algorithm, 'natural' to use another one that reflects " --"more the position and size of the actual window" --msgstr "" -+msgid "Place window captions on top" -+msgstr "విండో కాప్షన్లను పైన వుంచుము" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 - msgid "" --"Try to use more screen for placing window thumbnails by adapting to screen " --"aspect ratio, and consolidating them further to reduce the bounding box. " --"This setting applies only with the natural placement strategy." -+"If true, place window captions on top the respective thumbnail, overriding " -+"shell default of placing it at the bottom. Changing this setting requires " -+"restarting the shell to have any effect." - msgstr "" -+"ఒకవేళ నిజమైతే, సంభందిత థంబ్‌నెయిల్ పైన విండో కాప్షన్లు వుంచును, షెల్ " -+"అప్రమేయంగా కింద వుంచడం వోవర్‌రైడ్ చేయబడును. ఈ అమర్పు ప్రభావితం కావడానికి " -+"షెల్ పునఃప్రారంభించవలసి వుంటుంది." -+ -+#: ../extensions/places-menu/extension.js:77 -+msgid "Places" -+msgstr "స్థలములు" - --#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5 --msgid "Use more screen for windows" --msgstr "విండోల కొరకు ఎక్కువ తెరను వాడు" -+#: ../extensions/places-menu/placeDisplay.js:56 -+#, c-format -+msgid "Failed to launch \"%s\"" -+msgstr "\"%s\" ప్రారంభించుటలో విఫలమైంది" - --#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6 --msgid "Window placement strategy" --msgstr "" -+#: ../extensions/places-menu/placeDisplay.js:98 -+#: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "కంప్యూటర్" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 -+msgid "Home" -+msgstr "నివాసం" -+ -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" -+msgstr "నెట్‌వర్కులో విహరించు" -+ -+#: ../extensions/systemMonitor/extension.js:213 -+msgid "CPU" -+msgstr "CPU" -+ -+#: ../extensions/systemMonitor/extension.js:266 -+msgid "Memory" -+msgstr "మెమొరి" - - #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 -+msgid "Theme name" -+msgstr "థీము పేరు" -+ -+#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 - msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" - msgstr "థీము యొక్క పేరు ~/.themes/name/gnome-shell నుండి ఎక్కించబడును" - --#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 --msgid "Theme name" --msgstr "థీము పేరు" -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "విండోలను ఎప్పుడు సమూహం చేయాలి" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "" -+"విండోజాబితాలో ఒకే రకమైన అప్లకేషన్ నుండి వచ్చిన విండోలను ఎప్పుడు సమూహం చేయాలో " -+"నిర్ణయిస్తుంది. సాధ్యమైన విలువలు \"ఎప్పటికివద్దు\", \"స్వయంచాలకంగా\" మరియు " -+"\"ఎల్లప్పుడు\"." -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "విండో సమూహికీకరణ" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "విండోలను ఎప్పుడూ సమూహం చేయవద్దు" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "స్థాలము పరిమితంగా ఉన్నప్పడు విండోలను సమూహం చేయుము" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "విండోలను ఎల్లప్పుడు సమూహం చేయాలి" -+ -+#: ../extensions/workspace-indicator/extension.js:30 -+msgid "Workspace Indicator" -+msgstr "పనిస్థలం సూచకి" -+ -+#: ../extensions/workspace-indicator/prefs.js:141 -+msgid "Workspace names:" -+msgstr "పనిస్థలం పేర్లు:" -+ -+#: ../extensions/workspace-indicator/prefs.js:152 -+msgid "Name" -+msgstr "పేరు" - --#: ../extensions/xrandr-indicator/extension.js:26 -+#: ../extensions/workspace-indicator/prefs.js:186 -+#, c-format -+msgid "Workspace %d" -+msgstr "పనిస్థలం %d" -+ -+#: ../extensions/xrandr-indicator/extension.js:30 - msgid "Normal" - msgstr "సాధారణ" - --#: ../extensions/xrandr-indicator/extension.js:27 -+#: ../extensions/xrandr-indicator/extension.js:31 - msgid "Left" - msgstr "ఎడమ" - --#: ../extensions/xrandr-indicator/extension.js:28 -+#: ../extensions/xrandr-indicator/extension.js:32 - msgid "Right" - msgstr "కుడి" - --#: ../extensions/xrandr-indicator/extension.js:29 -+#: ../extensions/xrandr-indicator/extension.js:33 - msgid "Upside-down" --msgstr "" -+msgstr "తలక్రిందులుగా" - --#: ../extensions/xrandr-indicator/extension.js:78 --msgid "Configure display settings..." --msgstr "ప్రదర్శన అమరికలను స్వరూపించు..." -+#: ../extensions/xrandr-indicator/extension.js:50 -+msgid "Display" -+msgstr "ప్రదర్శించు" -+ -+#: ../extensions/xrandr-indicator/extension.js:80 -+msgid "Display Settings" -+msgstr "అమర్పులు ప్రదర్శించు" -diff -up gnome-shell-extensions-3.8.4/po/zh_CN.po.translations gnome-shell-extensions-3.8.4/po/zh_CN.po ---- gnome-shell-extensions-3.8.4/po/zh_CN.po.translations 2013-08-22 03:59:36.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/zh_CN.po 2013-12-12 00:35:58.472258653 -0500 -@@ -4,55 +4,56 @@ - # Wylmer Wang , 2011. - # Aron Xu , 2011. - # tuhaihe <1132321739qq@gmail.com>, 2012. --# -+# Leah Liu , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions master\n" - "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" - "shell&keywords=I18N+L10N&component=extensions\n" --"POT-Creation-Date: 2013-07-13 21:51+0000\n" --"PO-Revision-Date: 2013-08-03 22:10+0800\n" --"Last-Translator: tuhaihe <1132321739qq@gmail.com>\n" -+"POT-Creation-Date: 2013-02-19 22:34+0000\n" -+"PO-Revision-Date: 2013-09-23 02:39-0400\n" -+"Last-Translator: Leah Liu \n" - "Language-Team: Chinese (Simplified) \n" --"Language: \n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"X-Generator: Poedit 1.5.4\n" -+"Language: zh-CN\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=1; plural=0\n" - - #: ../data/gnome-classic.desktop.in.h:1 - #: ../data/gnome-classic.session.desktop.in.in.h:1 - msgid "GNOME Classic" --msgstr "GNOME 经典模式" -+msgstr "传统 GNOME" - - #: ../data/gnome-classic.desktop.in.h:2 - msgid "This session logs you into GNOME Classic" --msgstr "该会话将登录到“GNOME 经典模式”" -+msgstr "此会话将让您登录到传统 GNOME" - - #: ../data/gnome-shell-classic.desktop.in.in.h:1 - msgid "GNOME Shell Classic" --msgstr "GNOME Shell 经典模式" -+msgstr "传统 GNOME Shell" - - #: ../data/gnome-shell-classic.desktop.in.in.h:2 - msgid "Window management and application launching" --msgstr "窗口管理与应用启动" -+msgstr "启动窗口管理和应用程序" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 - msgid "Attach modal dialog to the parent window" --msgstr "将模式对话框附着到父窗口" -+msgstr "将模态对话框附到其上级窗口中" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" - "This key overrides the key in org.gnome.mutter when running GNOME Shell." --msgstr "当运行 GNOME Shell 时该键会覆盖 org.gnome.mutter 中的键。" -+msgstr "当 GNOME Shell 运行时,此激活码覆盖 org.gnome.mutter 中的激活码。" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 - msgid "Enable edge tiling when dropping windows on screen edges" --msgstr "启用将窗口拖拽到屏幕边缘时平铺显示的功能" -+msgstr "当窗口位于屏幕边缘时启用边缘平铺" - - #: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 - msgid "Workspaces only on primary monitor" --msgstr "仅在主显示器上显示工作区" -+msgstr "仅在主显示器中显示工作区" - - #: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" -@@ -105,7 +106,7 @@ msgstr "控制“休眠”菜单项的� - - #: ../extensions/apps-menu/extension.js:39 - msgid "Activities Overview" --msgstr "活动概览" -+msgstr "活动概述" - - #: ../extensions/apps-menu/extension.js:113 - msgid "Favorites" -@@ -123,8 +124,7 @@ msgstr "应用程序和工作区列表" - msgid "" - "A list of strings, each containing an application id (desktop file name), " - "followed by a colon and the workspace number" --msgstr "" --"一系列字符串,每个字符串包含一个应用程序标识(桌面文件名称)、冒号加工作区号" -+msgstr "一系列字符串,每个字符串包含一个应用程序标识(桌面文件名称)、冒号加工作区号" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" -@@ -150,7 +150,7 @@ msgstr "添加" - #: ../extensions/drive-menu/extension.js:72 - #, c-format - msgid "Ejecting drive '%s' failed:" --msgstr "弹出驱动器“%s”失败:" -+msgstr "弹出驱动器 '%s' 失败:" - - #: ../extensions/drive-menu/extension.js:89 - msgid "Removable devices" -@@ -158,7 +158,7 @@ msgstr "可移动设备" - - #: ../extensions/drive-menu/extension.js:106 - msgid "Open File" --msgstr "打开文件管理器" -+msgstr "打开文件" - - #: ../extensions/example/extension.js:17 - msgid "Hello, world!" -@@ -181,8 +181,7 @@ msgid "" - "Example aims to show how to build well behaved extensions for the Shell and " - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." --msgstr "" --"示例意在展示如何为 Shell 创建良好工作的扩展,本身功能有限。\n" -+msgstr "示例意在展示如何为 Shell 创建良好工作的扩展,本身功能有限。\n" - "尽管如此,它还是具备定制祝福语的功能。" - - #: ../extensions/example/prefs.js:36 -@@ -198,9 +197,7 @@ msgid "" - "Try to use more screen for placing window thumbnails by adapting to screen " - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." --msgstr "" --"尝试通过适应屏幕宽高比,以及相互组合以减少包围框,在摆放窗口缩略图时利用更多" --"屏幕空间。此设置只应用于自然摆放策略。" -+msgstr "尝试通过适应屏幕宽高比,以及相互组合以减少包围框,在摆放窗口缩略图时利用更多屏幕空间。此设置只应用于自然摆放策略。" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" -@@ -212,8 +209,7 @@ msgid "" - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." - msgstr "" --"如果设置为 true,则将窗口说明文字放置在对应窗口的缩略图上方,而不是默认的下" --"方。修改此设置需要重启 GNOME Shell 以使设置生效。" -+"如果设置为 true,则将窗口说明文字放置在对应窗口的缩略图上方,而不是默认的下方。修改此设置需要重启 GNOME Shell 以使设置生效。" - - #: ../extensions/places-menu/extension.js:77 - msgid "Places" -@@ -255,15 +251,13 @@ msgstr "从 ~/.themes/name/gnome-shell � - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 - msgid "When to group windows" --msgstr "何时分组窗口" -+msgstr "将窗口分组时" - - #: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 - msgid "" - "Decides when to group windows from the same application on the window list. " - "Possible values are \"never\", \"auto\" and \"always\"." --msgstr "" --"决定何时对窗口列表上的同一应用的窗口进行分组。可用值有“never”(从" --"不)、“auto”(自动)和“always”(总是)。" -+msgstr "决定合适将窗口列表中的同一应用程序窗口分组。可能值为“never”,“auto”以及“always”。" - - #: ../extensions/window-list/prefs.js:30 - msgid "Window Grouping" -@@ -275,11 +269,11 @@ msgstr "从不将窗口分组" - - #: ../extensions/window-list/prefs.js:50 - msgid "Group windows when space is limited" --msgstr "当空间有限时将窗口分组" -+msgstr "空间有限时将窗口分组" - - #: ../extensions/window-list/prefs.js:51 - msgid "Always group windows" --msgstr "总是对窗口分组" -+msgstr "总是将窗口分组" - - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" -@@ -321,173 +315,3 @@ msgstr "显示" - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" - msgstr "显示设置" -- --#~ msgid "The application icon mode." --#~ msgstr "应用程序图标模式。" -- --#~ msgid "" --#~ "Configures how the windows are shown in the switcher. Valid possibilities " --#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" --#~ "only' (shows only the application icon) or 'both'." --#~ msgstr "" --#~ "配置窗口在切换器中的显示方式。有效值包括“仅缩略图”(显示窗口的缩略图)、“仅" --#~ "应用程序图标”(仅显示应用程序图标)或“全部”。" -- --#~ msgid "Drag here to add favorites" --#~ msgstr "拖放到这里以添加收藏" -- --#~ msgid "New Window" --#~ msgstr "新窗口" -- --#~ msgid "Quit Application" --#~ msgstr "退出应用程序" -- --#~ msgid "Remove from Favorites" --#~ msgstr "移除收藏" -- --#~ msgid "Position of the dock" --#~ msgstr "Dock 位置" -- --#~ msgid "" --#~ "Sets the position of the dock in the screen. Allowed values are 'right' " --#~ "or 'left'" --#~ msgstr "设置 Dock 在屏幕上的位置。允许的值有“右”或“左”。" -- --#~ msgid "Icon size" --#~ msgstr "图标大小" -- --#~ msgid "Sets icon size of the dock." --#~ msgstr "设置 Dock 上的图标大小。" -- --#~ msgid "Enable/disable autohide" --#~ msgstr "启用/禁用自动隐藏" -- --#~ msgid "Autohide effect" --#~ msgstr "自动隐藏效果" -- --#~ msgid "" --#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' " --#~ "and 'move'" --#~ msgstr "设置隐藏 Dock 的效果。允许的值有“resize”、“rescale”和“move”" -- --#~ msgid "Autohide duration" --#~ msgstr "自动隐藏时间" -- --#~ msgid "Sets the time duration of the autohide effect." --#~ msgstr "设置自动隐藏的动画过渡时间。" -- --#~ msgid "Monitor" --#~ msgstr "显示器" -- --#~ msgid "" --#~ "Sets monitor to display dock in. The default value (-1) is the primary " --#~ "monitor." --#~ msgstr "设置显示 Dock 的显示器。默认值(-1)是主显示器。" -- --#~ msgid "%s is away." --#~ msgstr "%s 不在。" -- --#~ msgid "%s is offline." --#~ msgstr "%s 离线。" -- --#~ msgid "%s is online." --#~ msgstr "%s 在线。" -- --#~ msgid "%s is busy." --#~ msgstr "%s 忙碌。" -- --#~ msgid "Devices" --#~ msgstr "设备" -- --#~ msgid "Bookmarks" --#~ msgstr "书签" -- --#~ msgid "Network" --#~ msgstr "网络" -- --#~ msgid "File System" --#~ msgstr "文件系统" -- --#~ msgid "The alt tab behaviour." --#~ msgstr "Alt Tab 行为。" -- --#~ msgid "" --#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and " --#~ "workspace_icons. See the configuration dialogs for details." --#~ msgstr "" --#~ "设置 Alt-Tab 行为。可取的值有:native(原生)、all_thumbnails(所有缩略图) " --#~ "和 workspace_icons(工作区内图标)。详情参阅配置对话框。" -- --#~ msgid "" --#~ "This mode presents all applications from all workspaces in one selection " --#~ "list. Instead of using the application icon of every window, it uses " --#~ "small thumbnails resembling the window itself." --#~ msgstr "" --#~ "此模式将在一个选择列表中展示全部工作区中的所有应用程序。它使用小缩略图而非" --#~ "各窗口的应用程序图标来代表窗口。" -- --#~ msgid "Workspace & Icons" --#~ msgstr "工作区和图标" -- --#~ msgid "" --#~ "This mode let's you switch between the applications of your current " --#~ "workspace and gives you additionally the option to switch to the last " --#~ "used application of your previous workspace. This is always the last " --#~ "symbol in the list and is segregated by a separator/vertical line if " --#~ "available. \n" --#~ "Every window is represented by its application icon." --#~ msgstr "" --#~ "此模式让您在当前工作区中的应用程序及上个工作区、上次使用的应用程序间切换。" --#~ "上次使用这项总是列表中的最后一个符号,并以分隔符或竖线区别(若可能)。\n" --#~ "每个窗口以其应用程序图标展示。" -- --#~ msgid "Move current selection to front before closing the popup" --#~ msgstr "在关闭弹出界面前将当前选择移到前面" -- --#~ msgid "" --#~ "The Alternate Tab can be used in different modes, that affect the way " --#~ "windows are chosen and presented." --#~ msgstr "" --#~ "Alternate Tab 有多种使用模式,所使用模式会影响窗口展示和选择的方式。" -- --#~ msgid "Removable Devices" --#~ msgstr "可移动设备" -- --#~ msgid "Configure display settings..." --#~ msgstr "配置显示设置..." -- --#~ msgid "Notifications" --#~ msgstr "提示" -- --#~ msgid "Online Accounts" --#~ msgstr "在线帐号" -- --#~ msgid "Lock Screen" --#~ msgstr "锁定屏幕" -- --#~ msgid "Switch User" --#~ msgstr "切换用户" -- --#~ msgid "Log Out..." --#~ msgstr "注销..." -- --#~ msgid "Alt Tab Behaviour" --#~ msgstr "Alt Tab 行为" -- --#~ msgid "Cancel" --#~ msgstr "取消" -- --#~ msgid "Ask the user for a default behaviour if true." --#~ msgstr "如果设置为 true,询问用户设置一个默认行为。" -- --#~ msgid "Indicates if Alternate Tab is newly installed" --#~ msgstr "指示“候选标签”是否为最近安装的" -- --#~ msgid "Window placement strategy" --#~ msgstr "窗口放置策略" -- --#~ msgid "Available" --#~ msgstr "在线" -- --#~ msgid "Busy" --#~ msgstr "忙碌" -diff -up gnome-shell-extensions-3.8.4/po/zh_TW.po.translations gnome-shell-extensions-3.8.4/po/zh_TW.po ---- gnome-shell-extensions-3.8.4/po/zh_TW.po.translations 2013-09-11 09:53:38.000000000 -0400 -+++ gnome-shell-extensions-3.8.4/po/zh_TW.po 2013-12-12 00:35:58.472258653 -0500 -@@ -2,64 +2,87 @@ - # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER - # This file is distributed under the same license as the gnome-shell-extensions package. - # Cheng-Chia Tseng , 2011. --# -+# tchuang , 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" - "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" - "shell&keywords=I18N+L10N&component=extensions\n" - "POT-Creation-Date: 2012-11-16 19:30+0000\n" --"PO-Revision-Date: 2012-11-19 22:02+0800\n" --"Last-Translator: Cheng-Chia Tseng \n" -+"PO-Revision-Date: 2013-09-29 09:16-0400\n" -+"Last-Translator: tchuang \n" - "Language-Team: Chinese (Taiwan) \n" --"Language: \n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" -+"Language: zh-TW\n" -+"X-Generator: Zanata 3.1.2\n" -+"Plural-Forms: nplurals=1; plural=0\n" -+ -+#: ../data/gnome-classic.desktop.in.h:1 -+#: ../data/gnome-classic.session.desktop.in.in.h:1 -+msgid "GNOME Classic" -+msgstr "GNOME Classic" -+ -+#: ../data/gnome-classic.desktop.in.h:2 -+msgid "This session logs you into GNOME Classic" -+msgstr "此 session 會將您登入 GNOME Classic 中" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:1 -+msgid "GNOME Shell Classic" -+msgstr "GNOME Shell Classic" -+ -+#: ../data/gnome-shell-classic.desktop.in.in.h:2 -+msgid "Window management and application launching" -+msgstr "視窗管理與應用程式的執行" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -+msgid "Attach modal dialog to the parent window" -+msgstr "在上層視窗附加強制對話方塊" - --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1 --msgid "The application icon mode." --msgstr "應用程式圖示模式。" -- --#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2 -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 - msgid "" --"Configures how the windows are shown in the switcher. Valid possibilities " --"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" --"only' (shows only the application icon) or 'both'." --msgstr "" --"設定視窗在切換器中顯示的方式。有效的選項為「thumbnail-only」(顯示視窗的縮" --"圖)、「app-icon-only」(僅顯示應用程式圖示),或「both」(兩者)" -+"This key overrides the key in org.gnome.mutter when running GNOME Shell." -+msgstr "此設定鍵會在執行 GNOME Shell 時覆蓋 org.gnome.mutter 中的設定鍵。" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -+msgid "Enable edge tiling when dropping windows on screen edges" -+msgstr "在螢幕邊緣放下視窗時啟用邊緣拼貼" -+ -+#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -+msgid "Workspaces only on primary monitor" -+msgstr "工作區只在主要顯示器上顯示" - --#: ../extensions/alternate-tab/prefs.js:26 -+#: ../extensions/alternate-tab/prefs.js:20 - msgid "Thumbnail only" - msgstr "僅縮圖" - --#: ../extensions/alternate-tab/prefs.js:27 -+#: ../extensions/alternate-tab/prefs.js:21 - msgid "Application icon only" - msgstr "僅應用程式圖示" - --#: ../extensions/alternate-tab/prefs.js:28 -+#: ../extensions/alternate-tab/prefs.js:22 - msgid "Thumbnail and application icon" - msgstr "縮圖與應用程式圖示" - --#: ../extensions/alternate-tab/prefs.js:43 -+#: ../extensions/alternate-tab/prefs.js:37 - msgid "Present windows as" - msgstr "視窗呈現方式" - --#: ../extensions/alternate-tab/prefs.js:68 -+#: ../extensions/alternate-tab/prefs.js:62 - msgid "Show only windows in the current workspace" - msgstr "僅顯示目前工作區中的視窗" - - #. add the new entries --#: ../extensions/alternative-status-menu/extension.js:144 -+#: ../extensions/alternative-status-menu/extension.js:125 - msgid "Suspend" - msgstr "暫停" - --#: ../extensions/alternative-status-menu/extension.js:147 -+#: ../extensions/alternative-status-menu/extension.js:128 - msgid "Hibernate" - msgstr "休眠" - --#: ../extensions/alternative-status-menu/extension.js:150 -+#: ../extensions/alternative-status-menu/extension.js:131 - msgid "Power Off" - msgstr "關閉電源" - -@@ -79,6 +102,18 @@ msgstr "啟用休眠" - msgid "Control the visibility of the Hibernate menu item" - msgstr "控制休眠選單項目的可見性" - -+#: ../extensions/apps-menu/extension.js:39 -+msgid "Activities Overview" -+msgstr "活動總覽" -+ -+#: ../extensions/apps-menu/extension.js:113 -+msgid "Favorites" -+msgstr "喜好" -+ -+#: ../extensions/apps-menu/extension.js:278 -+msgid "Applications" -+msgstr "應用程式" -+ - #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 - msgid "Application and workspace list" - msgstr "應用程式與工作區清單" -@@ -87,9 +122,7 @@ msgstr "應用程式與工作區清單" - msgid "" - "A list of strings, each containing an application id (desktop file name), " - "followed by a colon and the workspace number" --msgstr "" --"字串的清單,每個都包含一個應用程式 id (桌面檔名稱),後面接著半形分號 \";\" 與" --"工作區號碼" -+msgstr "字串的清單,每個都包含一個應用程式 id (桌面檔名稱),後面接著半形分號 \";\" 與工作區號碼" - - #: ../extensions/auto-move-windows/prefs.js:55 - msgid "Application" -@@ -146,9 +179,7 @@ msgid "" - "Example aims to show how to build well behaved extensions for the Shell and " - "as such it has little functionality on its own.\n" - "Nevertheless it's possible to customize the greeting message." --msgstr "" --"Example 旨要顯示如何替 Shell 建立行為良好的擴充套件,但它自己本身沒有什麼功" --"能。\n" -+msgstr "Example 旨要顯示如何替 Shell 建立行為良好的擴充套件,但它自己本身沒有什麼功能。\n" - "不過,它可以讓您自訂歡迎訊息。" - - #: ../extensions/example/prefs.js:36 -@@ -164,9 +195,7 @@ msgid "" - "Try to use more screen for placing window thumbnails by adapting to screen " - "aspect ratio, and consolidating them further to reduce the bounding box. " - "This setting applies only with the natural placement strategy." --msgstr "" --"藉由適應螢幕長寬比來試著使用更多螢幕空間放置視窗縮圖,進一步聯合它們來減少邊" --"界盒。這個設定僅適用於自然放置策略。" -+msgstr "藉由適應螢幕長寬比來試著使用更多螢幕空間放置視窗縮圖,進一步聯合它們來減少邊界盒。這個設定僅適用於自然放置策略。" - - #: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 - msgid "Place window captions on top" -@@ -177,41 +206,28 @@ msgid "" - "If true, place window captions on top the respective thumbnail, overriding " - "shell default of placing it at the bottom. Changing this setting requires " - "restarting the shell to have any effect." --msgstr "" --"如果為真,在對映的縮圖頂端放置視窗說明標題,凌駕 Shell 將它放置在底部的預設" --"值。變更這個設定值需要重新啟動 Shell 來套用效果。" -+msgstr "如果為真,在對映的縮圖頂端放置視窗說明標題,凌駕 Shell 將它放置在底部的預設值。變更這個設定值需要重新啟動 Shell 來套用效果。" - --#: ../extensions/places-menu/extension.js:46 -+#: ../extensions/places-menu/extension.js:77 - msgid "Places" - msgstr "位置" - --#: ../extensions/places-menu/extension.js:47 --msgid "Devices" --msgstr "裝置" -- --#: ../extensions/places-menu/extension.js:48 --msgid "Bookmarks" --msgstr "書籤" -- --#: ../extensions/places-menu/extension.js:49 --msgid "Network" --msgstr "網路" -- --#: ../extensions/places-menu/placeDisplay.js:48 -+#: ../extensions/places-menu/placeDisplay.js:56 - #, c-format - msgid "Failed to launch \"%s\"" - msgstr "無法啟動「%s」" - -+#: ../extensions/places-menu/placeDisplay.js:98 - #: ../extensions/places-menu/placeDisplay.js:121 -+msgid "Computer" -+msgstr "電腦" -+ -+#: ../extensions/places-menu/placeDisplay.js:199 - msgid "Home" - msgstr "家目錄" - --#: ../extensions/places-menu/placeDisplay.js:195 --msgid "File System" --msgstr "檔案系統" -- --#: ../extensions/places-menu/placeDisplay.js:199 --msgid "Browse network" -+#: ../extensions/places-menu/placeDisplay.js:286 -+msgid "Browse Network" - msgstr "瀏覽網路" - - #: ../extensions/systemMonitor/extension.js:213 -@@ -230,6 +246,32 @@ msgstr "主題名稱" - msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" - msgstr "主題的名稱,要從 ~/.themes/name/gnome-shell 載入" - -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 -+msgid "When to group windows" -+msgstr "何時將視窗分群" -+ -+#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 -+msgid "" -+"Decides when to group windows from the same application on the window list. " -+"Possible values are \"never\", \"auto\" and \"always\"." -+msgstr "決定何時會將相同應用程式的視窗在視窗清單中分群。可用的值為「永不(never)」、「自動(auto)」,和「總是(always)」。" -+ -+#: ../extensions/window-list/prefs.js:30 -+msgid "Window Grouping" -+msgstr "視窗分群" -+ -+#: ../extensions/window-list/prefs.js:49 -+msgid "Never group windows" -+msgstr "永不將視窗分群" -+ -+#: ../extensions/window-list/prefs.js:50 -+msgid "Group windows when space is limited" -+msgstr "當空間有限時將視窗分群" -+ -+#: ../extensions/window-list/prefs.js:51 -+msgid "Always group windows" -+msgstr "總是將視窗分群" -+ - #: ../extensions/workspace-indicator/extension.js:30 - msgid "Workspace Indicator" - msgstr "工作區指示器" -@@ -270,194 +312,3 @@ msgstr "顯示" - #: ../extensions/xrandr-indicator/extension.js:80 - msgid "Display Settings" - msgstr "顯示設定值" -- --#~ msgid "" --#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and " --#~ "workspace_icons. See the configuration dialogs for details." --#~ msgstr "" --#~ "設定 Alt-Tab 行為。可用的值為:all_thumbnails、workspace_icons。請見組態對" --#~ "話盒瞭解詳細資訊。" -- --#~ msgid "The alt tab behaviour." --#~ msgstr "alt tab 按鍵行為。" -- --#~ msgid "" --#~ "This mode presents all applications from all workspaces in one selection " --#~ "list. Instead of using the application icon of every window, it uses " --#~ "small thumbnails resembling the window itself." --#~ msgstr "" --#~ "這個模式會將所有工作區的應用程式呈現於一個選取清單中。它使用小縮圖來象徵視" --#~ "窗本身,而不是使用應用程式圖示來代表每個視窗。" -- --#~ msgid "Workspace & Icons" --#~ msgstr "工作區與圖示" -- --#~ msgid "" --#~ "This mode let's you switch between the applications of your current " --#~ "workspace and gives you additionally the option to switch to the last " --#~ "used application of your previous workspace. This is always the last " --#~ "symbol in the list and is segregated by a separator/vertical line if " --#~ "available. \n" --#~ "Every window is represented by its application icon." --#~ msgstr "" --#~ "這個模式讓您在您目前工作區中的應用程式之間切換,而且給您額外的選項來切換至" --#~ "上個工作區中您上次使用的應用程式;它總會是清單中的最後一個圖像,而且可能的" --#~ "話會用分隔符/垂直線隔離開來。\n" --#~ "每個視窗會以其應用程式圖示呈現。" -- --#~ msgid "Move current selection to front before closing the popup" --#~ msgstr "在關閉彈出視窗之前,移動目前選取的項目至前方" -- --#~ msgid "" --#~ "The Alternate Tab can be used in different modes, that affect the way " --#~ "windows are chosen and presented." --#~ msgstr "Alternate Tab 可以使用不同的模式,會影響到選擇與呈現視窗的方式。" -- --#~ msgid "Drag here to add favorites" --#~ msgstr "拖曳至此處以加入喜好" -- --#~ msgid "New Window" --#~ msgstr "新視窗" -- --#~ msgid "Quit Application" --#~ msgstr "退出應用程式" -- --#~ msgid "Remove from Favorites" --#~ msgstr "自喜好移除" -- --#~ msgid "Add to Favorites" --#~ msgstr "加入喜好" -- --#~ msgid "Autohide duration" --#~ msgstr "自動隱藏時間" -- --#~ msgid "Autohide effect" --#~ msgstr "自動隱藏效果" -- --#~ msgid "Enable/disable autohide" --#~ msgstr "啟用/停用自動隱藏" -- --#~ msgid "Icon size" --#~ msgstr "圖示大小" -- --#~ msgid "Position of the dock" --#~ msgstr "Dock 的位置" -- --#~ msgid "Sets icon size of the dock." --#~ msgstr "設定 Dock 的圖示大小。" -- --#~ msgid "" --#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' " --#~ "and 'move'" --#~ msgstr "設定隱藏 Dock 的效果。可用的值為「resize」、「rescale」、「move」" -- --#~ msgid "" --#~ "Sets the position of the dock in the screen. Allowed values are 'right' " --#~ "or 'left'" --#~ msgstr "設定 Dock 在螢幕的位置。可用的值為「right」(右) 或「left」(左)" -- --#~ msgid "Sets the time duration of the autohide effect." --#~ msgstr "設定自動隱藏效果的時間長度。" -- --#~ msgid "%s is away." --#~ msgstr "%s 已離開。" -- --#~ msgid "%s is offline." --#~ msgstr "%s 現在離線。" -- --#~ msgid "%s is online." --#~ msgstr "%s 現在上線。" -- --#~ msgid "%s is busy." --#~ msgstr "%s 正忙碌。" -- --#~ msgid "Configure display settings..." --#~ msgstr "設定顯示器設定值..." -- --#~ msgid "Notifications" --#~ msgstr "通知" -- --#~ msgid "Online Accounts" --#~ msgstr "線上帳號" -- --#~ msgid "Lock Screen" --#~ msgstr "鎖定畫面" -- --#~ msgid "Switch User" --#~ msgstr "切換使用者" -- --#~ msgid "Log Out..." --#~ msgstr "登出..." -- --#~ msgid "" --#~ "This is the first time you use the Alternate Tab extension. \n" --#~ "Please choose your preferred behaviour:\n" --#~ "\n" --#~ "All & Thumbnails:\n" --#~ " This mode presents all applications from all workspaces in one " --#~ "selection \n" --#~ " list. Instead of using the application icon of every window, it uses " --#~ "small \n" --#~ " thumbnails resembling the window itself. \n" --#~ "\n" --#~ "Workspace & Icons:\n" --#~ " This mode let's you switch between the applications of your current \n" --#~ " workspace and gives you additionally the option to switch to the last " --#~ "used \n" --#~ " application of your previous workspace. This is always the last " --#~ "symbol in \n" --#~ " the list and is segregated by a separator/vertical line if " --#~ "available. \n" --#~ " Every window is represented by its application icon. \n" --#~ "\n" --#~ "Native:\n" --#~ " This mode is the native GNOME 3 behaviour or in other words: " --#~ "Clicking \n" --#~ " native switches the Alternate Tab extension off. \n" --#~ msgstr "" --#~ "這是您第一次使用 Alternate Tab 擴充套件。\n" --#~ "請選擇您偏好的行為:\n" --#~ "\n" --#~ "全部與縮圖:\n" --#~ " 這個模式會在一個選取清單中展現所有工作區的應用程式。\n" --#~ " 每個視窗不使用應用程式圖示,而是採用象徵視窗自己本身\n" --#~ " 的縮圖。\n" --#~ "\n" --#~ "工作區與圖示:\n" --#~ " 這個模式讓您在目前工作區的應用程式間切換,並額外給您\n" --#~ " 切換至上次使用的前個工作區應用程式的選項。它會是清單\n" --#~ " 中最後一個圖像,並且可能的話會用分隔符或垂直線分開。\n" --#~ " 每個視窗是由其應用程式圖示所表示。\n" --#~ "\n" --#~ "原生:\n" --#~ " 這個模式是 GNOME 3 的原生行為,換句話說:按下原生\n" --#~ " 會關閉 Alternate Tab 擴充套件。\n" -- --#~ msgid "Alt Tab Behaviour" --#~ msgstr "Alt Tab 行為" -- --#~ msgid "Cancel" --#~ msgstr "取消" -- --#~ msgid "Ask the user for a default behaviour if true." --#~ msgstr "若為真,詢問使用者預設行為。" -- --#~ msgid "Indicates if Alternate Tab is newly installed" --#~ msgstr "指示 Alternate Tab 是否為新安裝" -- --#~ msgid "" --#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use " --#~ "the default grid based algorithm, 'natural' to use another one that " --#~ "reflects more the position and size of the actual window" --#~ msgstr "" --#~ "用來配置縮圖的演算法。「grid」是採用預設的網格基礎演算法,「natural」則採" --#~ "用另一種反映視窗位置與實際大小的演算法。" -- --#~ msgid "Window placement strategy" --#~ msgstr "視窗擺放策略" -- --#~ msgid "Available" --#~ msgstr "有空" -- --#~ msgid "Busy" --#~ msgstr "忙碌" diff --git a/SOURCES/window-list-fixes.patch b/SOURCES/window-list-fixes.patch deleted file mode 100644 index dd3a18f..0000000 --- a/SOURCES/window-list-fixes.patch +++ /dev/null @@ -1,176 +0,0 @@ -From 0de4af866fe95df711eed2caa6c9a108e392e0f0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Fri, 14 Feb 2014 18:35:07 +0100 -Subject: [PATCH 1/3] window-list: Sync hover after closing menus - -StButton takes the hover state into account to decide whether a -series of events should be considered a click. So when dismissing -a menu by clicking on a different window/app button, its menu -cannot be triggered before leaving and re-entering the button -(and thus syncing the hover state). -Fix this by always syncing the hover state after a grab is dropped. - -https://bugzilla.gnome.org/show_bug.cgi?id=724688 ---- - extensions/window-list/extension.js | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js -index f282550..fc8e022 100644 ---- a/extensions/window-list/extension.js -+++ b/extensions/window-list/extension.js -@@ -45,6 +45,16 @@ function _openMenu(menu) { - menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); - } - -+function _onMenuStateChanged(menu, isOpen) { -+ if (isOpen) -+ return; -+ -+ let [x, y,] = global.get_pointer(); -+ let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); -+ if (windowList.actor.contains(actor)) -+ actor.sync_hover(); -+} -+ - - const WindowContextMenu = new Lang.Class({ - Name: 'WindowContextMenu', -@@ -185,6 +195,7 @@ const WindowButton = new Lang.Class({ - - this._menuManager = new PopupMenu.PopupMenuManager(this); - this._contextMenu = new WindowContextMenu(this.actor, this.metaWindow); -+ this._contextMenu.connect('open-state-changed', _onMenuStateChanged); - this._contextMenu.actor.hide(); - this._menuManager.addMenu(this._contextMenu); - Main.uiGroup.add_actor(this._contextMenu.actor); -@@ -361,6 +372,7 @@ const AppButton = new Lang.Class({ - - this._menuManager = new PopupMenu.PopupMenuManager(this); - this._menu = new PopupMenu.PopupMenu(this.actor, 0.5, St.Side.BOTTOM); -+ this._menu.connect('open-state-changed', _onMenuStateChanged); - this._menu.actor.hide(); - this._menu.connect('activate', Lang.bind(this, this._onMenuActivate)); - this._menuManager.addMenu(this._menu); -@@ -368,6 +380,7 @@ const AppButton = new Lang.Class({ - - this._contextMenuManager = new PopupMenu.PopupMenuManager(this); - this._appContextMenu = new AppContextMenu(this.actor, this.app); -+ this._appContextMenu.connect('open-state-changed', _onMenuStateChanged); - this._appContextMenu.actor.hide(); - this._contextMenuManager.addMenu(this._appContextMenu); - Main.uiGroup.add_actor(this._appContextMenu.actor); -@@ -442,6 +455,8 @@ const AppButton = new Lang.Class({ - this._windowTitle = new WindowTitle(this.metaWindow); - this._singleWindowTitle.child = this._windowTitle.actor; - this._windowContextMenu = new WindowContextMenu(this.actor, this.metaWindow); -+ this._windowContextMenu.connect('open-state-changed', -+ _onMenuStateChanged); - Main.uiGroup.add_actor(this._windowContextMenu.actor); - this._windowContextMenu.actor.hide(); - this._contextMenuManager.addMenu(this._windowContextMenu); --- -1.8.5.3 - - -From 9e991c4abb1cbc8dfea4e30f6d8d50dfb31fbca5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Sat, 15 Feb 2014 00:17:39 +0100 -Subject: [PATCH 2/3] window-list: Only have a single context menu at any time - -Depending on the number of windows, AppButtons use different right-click -menus ("Minimize" vs. "Minimize all"). -As the menu for the multiple-windows case remains the same, it is created -and added just once. However this means that in the single-window case, -the corresponding PopupMenuManager will track two menus for the same -source actor, resulting in various misbehaviors. -Fix these issues by adding and removing the app context menu appropriately, -so that the PopupMenuManager tracks a single menu at any time. - -https://bugzilla.gnome.org/show_bug.cgi?id=724688 ---- - extensions/window-list/extension.js | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js -index fc8e022..7547a51 100644 ---- a/extensions/window-list/extension.js -+++ b/extensions/window-list/extension.js -@@ -382,7 +382,6 @@ const AppButton = new Lang.Class({ - this._appContextMenu = new AppContextMenu(this.actor, this.app); - this._appContextMenu.connect('open-state-changed', _onMenuStateChanged); - this._appContextMenu.actor.hide(); -- this._contextMenuManager.addMenu(this._appContextMenu); - Main.uiGroup.add_actor(this._appContextMenu.actor); - - this._textureCache = St.TextureCache.get_default(); -@@ -461,6 +460,7 @@ const AppButton = new Lang.Class({ - this._windowContextMenu.actor.hide(); - this._contextMenuManager.addMenu(this._windowContextMenu); - } -+ this._contextMenuManager.removeMenu(this._appContextMenu); - this._contextMenu = this._windowContextMenu; - } else { - if (this._windowTitle) { -@@ -471,6 +471,7 @@ const AppButton = new Lang.Class({ - this._windowContextMenu = null; - } - this._contextMenu = this._appContextMenu; -+ this._contextMenuManager.addMenu(this._appContextMenu); - } - - }, --- -1.8.5.3 - - -From c8fe5fa5a6c6613a9e56ceda6c1b78e5d69ba6e4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Sat, 15 Feb 2014 00:19:56 +0100 -Subject: [PATCH 3/3] window-list: Call destroy() on menus instead of their - actors - -PopupBaseMenu provides a destroy() method that will destroy the menu -actor and make sure that the menu will be removed from the corresponding -PopupMenuManager (if any). We miss the latter when we destroy the menu -actor directly, so use the menu method instead. - -https://bugzilla.gnome.org/show_bug.cgi?id=724688 ---- - extensions/window-list/extension.js | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js -index 7547a51..1a60989 100644 ---- a/extensions/window-list/extension.js -+++ b/extensions/window-list/extension.js -@@ -264,7 +264,7 @@ const WindowButton = new Lang.Class({ - _onDestroy: function() { - global.window_manager.disconnect(this._switchWorkspaceId); - global.display.disconnect(this._notifyFocusId); -- this._contextMenu.actor.destroy(); -+ this._contextMenu.destroy(); - } - }); - -@@ -467,7 +467,7 @@ const AppButton = new Lang.Class({ - this.metaWindow = null; - this._singleWindowTitle.child = null; - this._windowTitle = null; -- this._windowContextMenu.actor.destroy(); -+ this._windowContextMenu.destroy(); - this._windowContextMenu = null; - } - this._contextMenu = this._appContextMenu; -@@ -529,7 +529,7 @@ const AppButton = new Lang.Class({ - global.window_manager.disconnect(this._switchWorkspaceId); - this._windowTracker.disconnect(this._notifyFocusId); - this.app.disconnect(this._windowsChangedId); -- this._menu.actor.destroy(); -+ this._menu.destroy(); - } - }); - --- -1.8.5.3 - diff --git a/SPECS/gnome-shell-extensions.spec b/SPECS/gnome-shell-extensions.spec index b1102ef..66d2ecd 100644 --- a/SPECS/gnome-shell-extensions.spec +++ b/SPECS/gnome-shell-extensions.spec @@ -5,8 +5,8 @@ %global pkg_prefix gnome-shell-extension Name: gnome-shell-extensions -Version: 3.8.4 -Release: 12%{?dist} +Version: 3.14.4 +Release: 13%{?dist} Summary: Modify and extend GNOME Shell functionality and behavior Group: User Interface/Desktops @@ -14,25 +14,6 @@ Group: User Interface/Desktops License: GPLv2+ and BSD URL: http://live.gnome.org/GnomeShell/Extensions Source0: http://ftp.gnome.org/pub/GNOME/sources/%{name}/%{major_version}/%{name}-%{version}.tar.xz - -# RFE 3.10 backports -Patch1: 0001-window-list-Add-context-menu.patch -Patch2: 0002-apps-menu-Respect-user-s-favorite-apps-order.patch - -Patch3: translations.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1031188 -Patch4: 0001-data-set-shell-classic-mode-via-env-variable-instead.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1053069 -Patch5: 0001-classic-shade-panel-in-overview.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1052990 -Patch6: 0001-apps-menu-add-logo-icon-to-Applications-menu.patch - -# https://bugzilla.redhat.com/show_bug.cgi?id=1025374 -Patch7: window-list-fixes.patch - BuildRequires: desktop-file-utils # BuildRequires: gnome-common BuildRequires: intltool @@ -41,25 +22,36 @@ BuildRequires: pkgconfig(libgtop-2.0) Requires: gnome-shell >= %{min_gs_version} BuildArch: noarch +Patch1: 0001-classic-shade-panel-in-overview.patch +Patch2: 0001-apps-menu-add-logo-icon-to-Applications-menu.patch +Patch3: 0001-Use-a-proper-arrows-instead-of-UTF8.patch +Patch4: add-extra-extensions.patch +Patch5: 0001-apps-menu-Fix-call-to-open_new_window.patch +Patch6: scale-window-list-with-text.patch +Patch7: support-headless-mode.patch +Patch8: 0001-window-list-Don-t-consider-skip-taskbar-windows-for-.patch +Patch9: 0001-workspace-indicator-Use-consistent-workspace-numberi.patch +Patch10: fix-apps-menu-panel-shortcut.patch +Patch11: multi-monitor-window-list.patch + %description GNOME Shell Extensions is a collection of extensions providing additional and optional functionality to GNOME Shell. Enabled extensions: * alternate-tab - * alternative-status-menu * apps-menu * auto-move-windows * drive-menu * launch-new-instance * native-window-placement * places-menu + * screenshot-window-sizer * systemMonitor * user-theme * window-list * windowsNavigator * workspace-indicator - * xrandr-indicator %package -n %{pkg_prefix}-common @@ -67,8 +59,15 @@ Summary: Files common to GNOME Shell Extensions Group: User Interface/Desktops License: GPLv2+ Requires: gnome-shell >= %{min_gs_version} -# Dock extension no longer provides by GNOME Shell extensions >= 3.7.1 +# Dock extension no longer provided by GNOME Shell extensions >= 3.7.1 Obsoletes: %{pkg_prefix}-dock < 3.7.1 +# Alternative-status-menu extension no longer provided by GNOME Shell extensions >= 3.9.5 +Obsoletes: %{pkg_prefix}-alternative-status-menu < 3.9.5 +# Xrandr-indicator extension no longer provided by GNOME Shell extensions >= 3.9.5 +Obsoletes: %{pkg_prefix}-xrandr-indicator < 3.9.90 +# Obsolete extensions dropped in favor of schema overrides by upstream +Obsoletes: %{pkg_prefix}-default-min-max < 3.9.3-1 +Obsoletes: %{pkg_prefix}-static-workspaces < 3.9.3-1 %description -n %{pkg_prefix}-common GNOME Shell Extensions is a collection of extensions providing additional and @@ -85,6 +84,7 @@ Requires: %{pkg_prefix}-apps-menu = %{version}-%{release} Requires: %{pkg_prefix}-launch-new-instance = %{version}-%{release} Requires: %{pkg_prefix}-places-menu = %{version}-%{release} Requires: %{pkg_prefix}-window-list = %{version}-%{release} +Requires: nautilus # Obsolete fallback mode components Obsoletes: gnome-applets < 1:3.5.92-5 %global gnome_applet_sensors_obsolete_ver 3.0.0-6 @@ -94,9 +94,6 @@ Obsoletes: gnome-applet-sensors-devel < %{gnome_applet_sensors_obsolete_ver Obsoletes: gnome-panel < %{gnome_panel_obsolete_ver} Obsoletes: gnome-panel-devel < %{gnome_panel_obsolete_ver} Obsoletes: gnome-panel-libs < %{gnome_panel_obsolete_ver} -# Obsoletes mini-extensions dropped in 3.8.3 -Obsoletes: %{pkg_prefix}-default-min-max < 3.8.3 -Obsoletes: %{pkg_prefix}-static-workspaces < 3.8.3 %description -n gnome-classic-session This package contains the required components for the GNOME Shell "classic" @@ -108,30 +105,18 @@ Summary: Classic Alt+Tab behavior for GNOME Shell Group: User Interface/Desktops License: GPLv2+ Requires: %{pkg_prefix}-common = %{version}-%{release} -Requires: nautilus %description -n %{pkg_prefix}-alternate-tab This GNOME Shell extension changes Alt+Tab to be window-based instead of app-based. -%package -n %{pkg_prefix}-alternative-status-menu -Summary: Power Off Item in GNOME Shell status menu -Group: User Interface/Desktops -License: GPLv2+ -Requires: %{pkg_prefix}-common = %{version}-%{release} - -%description -n %{pkg_prefix}-alternative-status-menu -This GNOME Shell extension adds a power off item in the status menu, and -provides the ability to hibernate. - - %package -n %{pkg_prefix}-apps-menu Summary: Application menu for GNOME Shell Group: User Interface/Desktops License: GPLv2+ Requires: %{pkg_prefix}-common = %{version}-%{release} -Requires: gnome-shell >= 3.8.4-21%{?dist} +Requires: gnome-menus %description -n %{pkg_prefix}-apps-menu This GNOME Shell extension adds a GNOME 2.x style menu for applications. @@ -149,6 +134,16 @@ workspace can be assigned to each application as soon as it creates a window, in a manner configurable with a GSettings key. +%package -n %{pkg_prefix}-dash-to-dock +Summary: Show the dash outside the activities overview +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-dash-to-dock +This GNOME Shell extension makes the dash available outside the activities overview. + + %package -n %{pkg_prefix}-drive-menu Summary: Drive status menu for GNOME Shell Group: User Interface/Desktops @@ -182,6 +177,16 @@ This GNOME Shell extension provides additional configurability for the window layout in the overview, including a mechanism similar to KDE4. +%package -n %{pkg_prefix}-panel-favorites +Summary: Favorite launchers in GNOME Shell's top bar +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-panel-favorites +This GNOME Shell extension adds favorite launchers to the top bar. + + %package -n %{pkg_prefix}-places-menu Summary: Places status menu for GNOME Shell Group: User Interface/Desktops @@ -193,6 +198,17 @@ This GNOME Shell extension add a system status menu for quickly navigating places in the system. +%package -n %{pkg_prefix}-screenshot-window-sizer +Summary: Screenshot window sizer for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-screenshot-window-sizer +This GNOME Shell extension allows to easily resize windows for GNOME Software +screenshots. + + %package -n %{pkg_prefix}-systemMonitor Summary: System Monitor for GNOME Shell Group: User Interface/Desktops @@ -206,6 +222,16 @@ Requires: libgtop2 This GNOME Shell extension is a message tray indicator for CPU and memory usage. +%package -n %{pkg_prefix}-top-icons +Summary: Show legacy icons on top +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-top-icons +This GNOME Shell extension moves legacy tray icons into the top bar. + + %package -n %{pkg_prefix}-user-theme Summary: Support for custom themes in GNOME Shell Group: User Interface/Desktops @@ -249,28 +275,24 @@ This GNOME Shell extension add a system status menu for quickly changing workspaces. -%package -n %{pkg_prefix}-xrandr-indicator -Summary: GNOME Shell status menu for rotating monitors -Group: User Interface/Desktops -License: GPLv2+ -Requires: %{pkg_prefix}-common = %{version}-%{release} - -%description -n %{pkg_prefix}-xrandr-indicator -This GNOME Shell extension adds a status menu to let rotate the laptop monitor -and open display preferences quickly. - - %prep %setup -q -%patch1 -p1 -b .window-list-context-menu -%patch2 -p1 -b .app-menu-favorites -%patch3 -p1 -b .translations -%patch4 -p1 -b .use-env-variable-for-session-mode -%patch5 -p1 -b .shade-panel-in-overview -%patch6 -p1 -b .apps-menu-add-logo-icon-to-Applications-menu -%patch7 -p1 -b .window-list-fixes + +%patch1 -p1 -b .shade-panel-in-overview +%patch2 -p1 -b .brand-applications-menu +%patch3 -p1 -b .fix-menu-arrows +%patch4 -p1 -b .add-extra-extensions +%patch5 -p1 -b .fix-open-new-window +%patch6 -p1 -b .scale-window-list +%patch7 -p1 -b .support-headless-mode +%patch8 -p1 -b .fix-window-list-sorting +%patch9 -p1 -b .use-consistent-workspace-numbering +%patch10 -p1 -b .fix-apps-menu-panel-shortcut +%patch11 -p1 -b .multi-monitor-window-list + %build +autoreconf -f # In case we build from a Git checkout [ -x autogen.sh ] && NOCONFIGURE=1 ./autogen.sh %configure --enable-extensions="all" @@ -278,17 +300,19 @@ make %{?_smp_mflags} %install -make install DESTDIR=$RPM_BUILD_ROOT +%make_install # Drop useless example extension rm -r $RPM_BUILD_ROOT%{_datadir}/gnome-shell/extensions/example*/ rm $RPM_BUILD_ROOT%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.example.gschema.xml -desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/gnome-shell-classic.desktop - %find_lang %{name} +%check +desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/gnome-shell-classic.desktop + + %files -n %{pkg_prefix}-common -f %{name}.lang %doc COPYING NEWS README %dir %{_datadir}/gnome-shell/extensions/ @@ -296,23 +320,17 @@ desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/gnome-shell-classi %files -n gnome-classic-session %{_datadir}/applications/gnome-shell-classic.desktop -%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.classic-overrides.gschema.xml %{_datadir}/gnome-session/sessions/gnome-classic.session %{_datadir}/gnome-shell/modes/classic.json %{_datadir}/gnome-shell/theme/*.svg %{_datadir}/gnome-shell/theme/gnome-classic.css %{_datadir}/xsessions/gnome-classic.desktop - +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.classic-overrides.gschema.xml %files -n %{pkg_prefix}-alternate-tab %{_datadir}/gnome-shell/extensions/alternate-tab*/ -%files -n %{pkg_prefix}-alternative-status-menu -%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.alternative-status-menu.gschema.xml -%{_datadir}/gnome-shell/extensions/alternative-status-menu*/ - - %files -n %{pkg_prefix}-apps-menu %{_datadir}/gnome-shell/extensions/apps-menu*/ @@ -321,6 +339,9 @@ desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/gnome-shell-classi %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.auto-move-windows.gschema.xml %{_datadir}/gnome-shell/extensions/auto-move-windows*/ +%files -n %{pkg_prefix}-dash-to-dock +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.dash-to-dock.gschema.xml +%{_datadir}/gnome-shell/extensions/dash-to-dock*/ %files -n %{pkg_prefix}-drive-menu %{_datadir}/gnome-shell/extensions/drive-menu*/ @@ -334,15 +355,26 @@ desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/gnome-shell-classi %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.native-window-placement.gschema.xml %{_datadir}/gnome-shell/extensions/native-window-placement*/ +%files -n %{pkg_prefix}-panel-favorites +%{_datadir}/gnome-shell/extensions/panel-favorites*/ %files -n %{pkg_prefix}-places-menu %{_datadir}/gnome-shell/extensions/places-menu*/ +%files -n %{pkg_prefix}-screenshot-window-sizer +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml +%{_datadir}/gnome-shell/extensions/screenshot-window-sizer*/ + + %files -n %{pkg_prefix}-systemMonitor %{_datadir}/gnome-shell/extensions/systemMonitor*/ +%files -n %{pkg_prefix}-top-icons +%{_datadir}/gnome-shell/extensions/top-icons*/ + + %files -n %{pkg_prefix}-user-theme %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.user-theme.gschema.xml %{_datadir}/gnome-shell/extensions/user-theme*/ @@ -361,10 +393,6 @@ desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/gnome-shell-classi %{_datadir}/gnome-shell/extensions/workspace-indicator*/ -%files -n %{pkg_prefix}-xrandr-indicator -%{_datadir}/gnome-shell/extensions/xrandr-indicator*/ - - %postun -n gnome-classic-session if [ $1 -eq 0 ]; then /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : @@ -374,21 +402,21 @@ fi /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : -%postun -n %{pkg_prefix}-alternative-status-menu +%postun -n %{pkg_prefix}-auto-move-windows if [ $1 -eq 0 ]; then /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : fi -%posttrans -n %{pkg_prefix}-alternative-status-menu +%posttrans -n %{pkg_prefix}-auto-move-windows /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : -%postun -n %{pkg_prefix}-auto-move-windows +%postun -n %{pkg_prefix}-dash-to-dock if [ $1 -eq 0 ]; then /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : fi -%posttrans -n %{pkg_prefix}-auto-move-windows +%posttrans -n %{pkg_prefix}-dash-to-dock /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : @@ -419,6 +447,58 @@ fi /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : %changelog +* Fri Sep 18 2015 Florian Müllner - 3.14.4-13 +- Add option to display window-list on all monitors + Resolves: rhbz#1263368 + +* Fri Sep 04 2015 Florian Müllner - 3.14.4-12 +- Fix window list scaling in classic mode + Resolves: rhbz#1229324 + +* Fri Sep 04 2015 Florian Müllner - 3.14.4-11 +- Fix apps-menu taking over panel shortcut + Resolves: rhbz#1255702 + +* Thu Sep 03 2015 Florian Müllner - 3.14.4-10 +- Add back nautilus dependency to classic-session + Resolves: rhbz#1256722 + +* Fri Jul 31 2015 Florian Müllner - 3.14.4-9 +- Number workspaces consistently + Resolves: rhbz#1249018 + +* Thu Jul 30 2015 Florian Müllner - 3.14.4-8 +- Fix window list sorting + Resolves: rhbz#1025370 + +* Fri Jul 24 2015 Florian Müllner - 3.14.4-7 +- Support headless mode + Related: rhbz#1243856 + +* Thu Jun 25 2015 Florian Müllner - 3.14.4-6 +- Scale window list with text + Resolves: rhbz#1229324 + +* Wed Jun 17 2015 Florian Müllner - 3.14.4-5 +- Fix failure of apps-menu to open applications + Resolves: rhbz#1229676 + +* Wed May 20 2015 Florian Müllner - 3.14.4-4 +- Include additional (popular) extensions + Resolves: rhbz#1208513 + +* Thu May 14 2015 Matthias Clasen - 3.14.4-3 +- Make the apps-menu package depend on gnome-menus +- Resolves: #1221531 + +* Tue May 12 2015 Florian Müllner - 3.14.4-2 +- Backport menu arrow fix from 3.16 +- Related: #1174574 + +* Mon Mar 23 2015 Florian Müllner - 3.14.4-1 +- Update to 3.14.4 +- Resolves: #1174574 + * Tue Oct 07 2014 David King 3.8.4-12 - Rebuild for libgtop2 soversion change (#1082123)