diff --git a/.gnome-shell-extensions.metadata b/.gnome-shell-extensions.metadata new file mode 100644 index 0000000..42fb38c --- /dev/null +++ b/.gnome-shell-extensions.metadata @@ -0,0 +1 @@ +e36c854b8bb9a8206b15b37a9a2836520086a46d SOURCES/gnome-shell-extensions-3.8.4.tar.xz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/0001-window-list-Add-context-menu.patch b/SOURCES/0001-window-list-Add-context-menu.patch new file mode 100644 index 0000000..ef90d9c --- /dev/null +++ b/SOURCES/0001-window-list-Add-context-menu.patch @@ -0,0 +1,359 @@ +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.actor.add_actor(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/0002-apps-menu-Respect-user-s-favorite-apps-order.patch b/SOURCES/0002-apps-menu-Respect-user-s-favorite-apps-order.patch new file mode 100644 index 0000000..5062da5 --- /dev/null +++ b/SOURCES/0002-apps-menu-Respect-user-s-favorite-apps-order.patch @@ -0,0 +1,37 @@ +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/places-volume.patch b/SOURCES/places-volume.patch new file mode 100644 index 0000000..f65ae0b --- /dev/null +++ b/SOURCES/places-volume.patch @@ -0,0 +1,23 @@ +diff -up gnome-shell-extensions-3.8.3/extensions/places-menu/placeDisplay.js.volume gnome-shell-extensions-3.8.3/extensions/places-menu/placeDisplay.js +--- gnome-shell-extensions-3.8.3/extensions/places-menu/placeDisplay.js.volume 2013-06-17 15:44:05.558371091 -0400 ++++ gnome-shell-extensions-3.8.3/extensions/places-menu/placeDisplay.js 2013-06-17 15:44:12.260417250 -0400 +@@ -292,7 +292,8 @@ const PlacesManager = new Lang.Class({ + let volumes = drives[i].get_volumes(); + + for(let j = 0; j < volumes.length; j++) { +- if (volumes[j].get_identifier('class').indexOf('network') >= 0) { ++ let identifier = volumes[j].get_identifier('class'); ++ if (identifier && identifier.indexOf('network') >= 0) { + networkVolumes.push(volumes[i]); + } else { + let mount = volumes[j].get_mount(); +@@ -308,7 +309,8 @@ const PlacesManager = new Lang.Class({ + if(volumes[i].get_drive() != null) + continue; + +- if (volumes[i].get_identifier('class').indexOf('network') >= 0) { ++ let identifier = volumes[j].get_identifier('class'); ++ if (identifier && identifier.indexOf('network') >= 0) { + networkVolumes.push(volumes[i]); + } else { + let mount = volumes[i].get_mount(); diff --git a/SPECS/gnome-shell-extensions.spec b/SPECS/gnome-shell-extensions.spec new file mode 100644 index 0000000..b75610f --- /dev/null +++ b/SPECS/gnome-shell-extensions.spec @@ -0,0 +1,595 @@ +%global major_version %%(cut -d "." -f 1-2 <<<%{version}) +# Minimum GNOME Shell version supported +%global min_gs_version %%(cut -d "." -f 1-3 <<<%{version}) + +%global pkg_prefix gnome-shell-extension + +Name: gnome-shell-extensions +Version: 3.8.4 +Release: 2%{?dist} +Summary: Modify and extend GNOME Shell functionality and behavior + +Group: User Interface/Desktops +# The entire source code is GPLv2+ except lib/convenience.js which is BSD +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 + +# upstream fix +Patch0: places-volume.patch + +# RFE 3.10 backports +Patch1: 0001-window-list-Add-context-menu.patch +Patch2: 0002-apps-menu-Respect-user-s-favorite-apps-order.patch + +BuildRequires: desktop-file-utils +# BuildRequires: gnome-common +BuildRequires: intltool +BuildRequires: pkgconfig(gnome-desktop-3.0) +BuildRequires: pkgconfig(libgtop-2.0) +Requires: gnome-shell >= %{min_gs_version} +BuildArch: noarch + +%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 + * systemMonitor + * user-theme + * window-list + * windowsNavigator + * workspace-indicator + * xrandr-indicator + + +%package -n %{pkg_prefix}-common +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 +Obsoletes: %{pkg_prefix}-dock < 3.7.1 + +%description -n %{pkg_prefix}-common +GNOME Shell Extensions is a collection of extensions providing additional and +optional functionality to GNOME Shell. Common files and directories needed by +extensions are provided here. + + +%package -n gnome-classic-session +Summary: GNOME "classic" mode session +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-alternate-tab = %{version}-%{release} +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} +# Obsolete fallback mode components +Obsoletes: gnome-applets < 1:3.5.92-5 +%global gnome_applet_sensors_obsolete_ver 3.0.0-6 +Obsoletes: gnome-applet-sensors < %{gnome_applet_sensors_obsolete_ver} +Obsoletes: gnome-applet-sensors-devel < %{gnome_applet_sensors_obsolete_ver} +%global gnome_panel_obsolete_ver 3.6.2-7 +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" +mode, which aims to provide a GNOME 2-like user interface. + + +%package -n %{pkg_prefix}-alternate-tab +Summary: Classic Alt+Tab behavior for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%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} + +%description -n %{pkg_prefix}-apps-menu +This GNOME Shell extension adds a GNOME 2.x style menu for applications. + + +%package -n %{pkg_prefix}-auto-move-windows +Summary: Assign specific workspaces to applications in GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-auto-move-windows +This GNOME Shell extension enables easy workspace management. A specific +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}-drive-menu +Summary: Drive status menu for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-drive-menu +This GNOME Shell extension provides a panel status menu for accessing and +unmounting removable devices. + + +%package -n %{pkg_prefix}-launch-new-instance +Summary: Always launch a new application instance for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-launch-new-instance +This GNOME Shell extension modifies the behavior of clicking in the dash and app +launcher to always launch a new application instance. + + +%package -n %{pkg_prefix}-native-window-placement +Summary: Native window placement for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-native-window-placement +This GNOME Shell extension provides additional configurability for the window +layout in the overview, including a mechanism similar to KDE4. + + +%package -n %{pkg_prefix}-places-menu +Summary: Places status menu for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-places-menu +This GNOME Shell extension add a system status menu for quickly navigating +places in the system. + + +%package -n %{pkg_prefix}-systemMonitor +Summary: System Monitor for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} +# Should be pulled in by control-center, but in case someone tries for a +# minimalist gnome-shell installation +Requires: libgtop2 + +%description -n %{pkg_prefix}-systemMonitor +This GNOME Shell extension is a message tray indicator for CPU and memory usage. + + +%package -n %{pkg_prefix}-user-theme +Summary: Support for custom themes in GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-user-theme +This GNOME Shell extension enables loading a GNOME Shell theme from +~/.themes//gnome-shell/. + + +%package -n %{pkg_prefix}-window-list +Summary: Display a window list at the bottom of the screen in GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-window-list +This GNOME Shell extension displays a window list at the bottom of the screen. + + +%package -n %{pkg_prefix}-windowsNavigator +Summary: Support for keyboard selection of windows and workspaces in GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-windowsNavigator +This GNOME Shell extension enables keyboard selection of windows and workspaces +in overlay mode, by pressing the Alt and Ctrl key respectively. + + +%package -n %{pkg_prefix}-workspace-indicator +Summary: Workspace indicator for GNOME Shell +Group: User Interface/Desktops +License: GPLv2+ +Requires: %{pkg_prefix}-common = %{version}-%{release} + +%description -n %{pkg_prefix}-workspace-indicator +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 + + +%build +# In case we build from a Git checkout +[ -x autogen.sh ] && NOCONFIGURE=1 ./autogen.sh +%configure --enable-extensions="all" +make %{?_smp_mflags} + + +%install +make install DESTDIR=$RPM_BUILD_ROOT + +# 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} + + +%files -n %{pkg_prefix}-common -f %{name}.lang +%doc COPYING NEWS README +%dir %{_datadir}/gnome-shell/extensions/ + + +%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 + + +%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*/ + + +%files -n %{pkg_prefix}-auto-move-windows +%{_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}-drive-menu +%{_datadir}/gnome-shell/extensions/drive-menu*/ + + +%files -n %{pkg_prefix}-launch-new-instance +%{_datadir}/gnome-shell/extensions/launch-new-instance*/ + + +%files -n %{pkg_prefix}-native-window-placement +%{_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}-places-menu +%{_datadir}/gnome-shell/extensions/places-menu*/ + + +%files -n %{pkg_prefix}-systemMonitor +%{_datadir}/gnome-shell/extensions/systemMonitor*/ + + +%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*/ + + +%files -n %{pkg_prefix}-window-list +%{_datadir}/gnome-shell/extensions/window-list*/ +%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.window-list.gschema.xml + + +%files -n %{pkg_prefix}-windowsNavigator +%{_datadir}/gnome-shell/extensions/windowsNavigator*/ + + +%files -n %{pkg_prefix}-workspace-indicator +%{_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 || : +fi + +%posttrans -n gnome-classic-session +/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : + + +%postun -n %{pkg_prefix}-alternative-status-menu +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 +/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : + + +%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}-auto-move-windows +/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : + + +%postun -n %{pkg_prefix}-native-window-placement +if [ $1 -eq 0 ]; then + /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : +fi + +%posttrans -n %{pkg_prefix}-native-window-placement +/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : + + +%postun -n %{pkg_prefix}-user-theme +if [ $1 -eq 0 ]; then + /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : +fi + +%posttrans -n %{pkg_prefix}-user-theme +/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : + + +%postun -n %{pkg_prefix}-window-list +if [ $1 -eq 0 ]; then + /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : +fi + +%posttrans -n %{pkg_prefix}-window-list +/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas/ &>/dev/null || : + + +%changelog +* Thu Oct 24 2013 Florian Müllner - 3.8.4-2 +- Backport some classic-mode improvements from 3.10 cycle: + - context menu in window list (close, minimize, maximize) + - use same order for favorites in applications menu as in dash + +* Thu Sep 12 2013 Debarshi Ray - 3.8.4-1 +- Update to 3.8.4 + +* Sun Aug 04 2013 Mohamed El Morabity - 3.8.3.1-1 +- Update to 3.8.3.1 +- Drop places-volume.patch patch, merged upstream + +* Mon Jun 17 2013 Matthias Clasen - 3.8.3-2 +- Fix a problem notices in updates-testing with the places extension + +* Sun Jun 09 2013 Mohamed El Morabity - 3.8.3-1 +- Update to 3.8.3 +- Drop mini-extensions default-min-max and static-workspaces, no longer + available (see https://bugzilla.gnome.org/show_bug.cgi?id=701717) + +* Tue May 14 2013 Mohamed El Morabity - 3.8.2-1 +- Update to 3.8.2 +- Drop useless dependency on libgtop for static-workspaces subpackage + +* Fri May 10 2013 Kalev Lember - 3.8.1-3 +- Obsolete gnome-applet-sensors + +* Wed May 01 2013 Kalev Lember - 3.8.1-2 +- Obsolete a few more fallback mode packages +- Remove gnome-panel provides + +* Tue Apr 16 2013 Matthias Clasen - 3.8.1-1 +- Update to 3.8.1 + +* Tue Mar 26 2013 Mohamed El Morabity - 3.8.0-1 +- Update to 3.8.0 + +* Tue Mar 19 2013 Ray Strode 3.7.92-1 +- Update to 3.7.92 + +* Tue Mar 05 2013 Mohamed El Morabity - 3.7.91-1 +- Update to 3.7.91 + +* Sat Mar 02 2013 Adel Gadllah - 3.7.90-2 +- Obsolete gnome-panel + +* Fri Feb 22 2013 Kalev Lember - 3.7.90-1 +- Update to 3.7.90 + +* Thu Feb 07 2013 Kalev Lember - 3.7.5.1-2 +- Depend on gnome-shell 3.7.5, there's no 3.7.5.1 + +* Thu Feb 07 2013 Mohamed El Morabity - 3.7.5.1-1 +- Update to 3.7.5 +- Enable new launch-new-instance and window-list extensions, and add them in the + classic-mode extension set +- Re-add places-menu in the classic-mode extension set + +* Wed Jan 16 2013 Mohamed El Morabity - 3.7.4-1 +- Update to 3.7.4 +- places-menu extension no longer part of the classic-mode extension set + +* Tue Jan 01 2013 Mohamed El Morabity - 3.7.3-1 +- Update to 3.7.3 +- Enable new default-min-max and static-workspaces extensions +- Provide new subpackage gnome-classic-session +- Revamp summaries and descriptions + +* Tue Oct 30 2012 Mohamed El Morabity - 3.7.1-1 +- Update to 3.7.1 +- Drop dock and gajim extensions, no longer provided + +* Tue Oct 30 2012 Mohamed El Morabity - 3.6.1-1 +- Update to 3.6.1 + +* Tue Oct 02 2012 Mohamed El Morabity - 3.6.0-1 +- Update to 3.6.0 + +* Thu Sep 06 2012 Mohamed El Morabity - 3.5.91-1 +- Update to 3.5.91 + +* Wed Aug 29 2012 Mohamed El Morabity - 3.5.90-1 +- Update to 3.5.90 + +* Sat Aug 11 2012 Mohamed El Morabity - 3.5.5-1 +- Update to 3.5.5 + +* Sun Jul 22 2012 Mohamed El Morabity - 3.5.4-1 +- Update to 3.5.4 + +* Wed Jul 18 2012 Mohamed El Morabity - 3.5.2-1 +- Update to 3.5.2 +- Drop useless Provides/Obsoletes + +* Sat Mar 24 2012 Mohamed El Morabity - 3.4.0-1 +- Update to 3.4.0 +- Minor spec fixes + +* Sat Mar 24 2012 Mohamed El Morabity - 3.3.92-1 +- Update to 3.3.92 + +* Tue Feb 28 2012 Mohamed El Morabity - 3.3.90-1 +- Update to 3.3.90 + +* Thu Feb 16 2012 Mohamed El Morabity - 3.3.5-1 +- Update to 3.3.5 +- Spec cleanup + +* Fri Jan 13 2012 Fedora Release Engineering - 3.3.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Nov 30 2011 Mohamed El Morabity - 3.3.2-1 +- Update to 3.3.2 + +* Wed Nov 30 2011 Mohamed El Morabity - 3.2.1-1 +- Update to 3.2.1 +- Fix alternative-status-menu extension crash when login + +* Wed Nov 09 2011 Mohamed El Morabity - 3.2.0-2 +- Fix dock and alternate-tab extensions +- Fix GNOME Shell version to work with GS 3.2.1 + +* Mon Oct 03 2011 Mohamed El Morabity - 3.2.0-1 +- Update to 3.2.0 + +* Mon Sep 26 2011 Mohamed El Morabity - 3.1.91-3.20111001gite102c0c6 +- Update to a newer git snapshot +- Fix GNOME Shell version to work with GS 3.2.0 +- Add Requires on GS 3.2.0 or above to gnome-shell-common + +* Wed Sep 14 2011 Mohamed El Morabity - 3.1.91-2 +- Enable xrandr-indicator and workspace-indicator extensions + +* Mon Sep 12 2011 Michel Salim - 3.1.91-1 +- Update to 3.1.91 +- add more documentation + +* Thu Sep 1 2011 Michel Salim - 3.1.4-3.20110830git6b5e3a3e +- Update to git snapshot, for gnome-shell 3.1.90 + +* Sun Aug 21 2011 Michel Salim - 3.1.4-2 +- Enable apps-menu extension +- Spec cleanup + +* Sun Aug 21 2011 Michel Salim - 3.1.4-1 +- Update to 3.1.4 +- Enable systemMonitor extension +- Prepare xrandr-indicator, commenting out since it does not seem to work yet +- Rename subpackages in line with new guidelines (# 715367) +- Sort subpackages in alphabetical order + +* Sat May 28 2011 Timur Kristóf - 3.0.2-1.g63dd27cgit +- Update to a newer git snapshot +- Fix RHBZ bug #708230 +- Enabled systemMonitor extension, but commented out since the requirements are not available + +* Fri May 13 2011 Mohamed El Morabity - 3.0.1-3.03660fgit +- Update to a newer git snapshot +- Enable native-window-placement extension + +* Fri May 06 2011 Rahul Sundaram - 3.0.1-2b20cbagit +- Fix description + +* Thu May 5 2011 Elad Alfassa - 3.0.1-1.b20cbagit +- Update to a newer git snapshot +- Enabled the places-menu extension + +* Tue Apr 26 2011 Mohamed El Morabity - 3.0.1-1.f016b9git +- Update to a newer git snapshot (post-3.0.1 release) +- Enable drive-menu extension + +* Mon Apr 11 2011 Mohamed El Morabity - 3.0.0-5.6d56cfgit +- Enable auto-move-windows extension + +* Sun Apr 10 2011 Rahul Sundaram - 3.0.0-4.6d56cfgit +- Add glib2-devel as build requires + +* Sun Apr 10 2011 Rahul Sundaram - 3.0.0-3.6d56cfgit +- Tweak description +- Fix typo in configure + +* Sun Apr 10 2011 Rahul Sundaram - 3.0.0-2.6d56cfgit +- Added the user-theme extension +- Patch from Timur Kristóf + +* Fri Apr 08 2011 Rahul Sundaram - 3.0.0-1.6d56cfgit +- Make sure configure doesn't get called twice + +* Fri Apr 08 2011 Rahul Sundaram - 3.0.0-0.6d56cfgit +- Initial build