From ab0fe324fcab3b9eda6d9cbc85b04ba62f10e3d4f2e8dce085936db2c96ea13b Mon Sep 17 00:00:00 2001 From: Dominique Leuenberger Date: Mon, 6 Nov 2017 10:53:02 +0000 Subject: [PATCH 1/2] Accepting request 539051 from home:luc14n0:branches:GNOME:Factory Update to version 3.26.2 OBS-URL: https://build.opensuse.org/request/show/539051 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gnome-shell-extensions?expand=0&rev=151 --- gnome-shell-extensions-3.26.1.tar.xz | 3 --- gnome-shell-extensions-3.26.2.tar.xz | 3 +++ gnome-shell-extensions.changes | 9 +++++++++ gnome-shell-extensions.spec | 6 +++--- 4 files changed, 15 insertions(+), 6 deletions(-) delete mode 100644 gnome-shell-extensions-3.26.1.tar.xz create mode 100644 gnome-shell-extensions-3.26.2.tar.xz diff --git a/gnome-shell-extensions-3.26.1.tar.xz b/gnome-shell-extensions-3.26.1.tar.xz deleted file mode 100644 index 3a87acd..0000000 --- a/gnome-shell-extensions-3.26.1.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2437c6abce399a97ff95c2de9784580a5db82c59b67e09eaf2c8d972cca1d6d0 -size 348988 diff --git a/gnome-shell-extensions-3.26.2.tar.xz b/gnome-shell-extensions-3.26.2.tar.xz new file mode 100644 index 0000000..95ca2a9 --- /dev/null +++ b/gnome-shell-extensions-3.26.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aefda4d810ef5ceb9402e2d620f4bdc1dc40c9cc4f6a51749840f7dd08628ab6 +size 348720 diff --git a/gnome-shell-extensions.changes b/gnome-shell-extensions.changes index 852670c..99fa999 100644 --- a/gnome-shell-extensions.changes +++ b/gnome-shell-extensions.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Sat Nov 4 03:09:18 UTC 2017 - luc14n0@linuxmail.org + +- Update to version 3.26.2: + + Updated translations. +- Update Url to + https://wiki.gnome.org/Projects/GnomeShell/Extensions: current + GNOME Shell Extensions project web page. + ------------------------------------------------------------------- Wed Nov 1 04:47:28 UTC 2017 - xwang@suse.com diff --git a/gnome-shell-extensions.spec b/gnome-shell-extensions.spec index d5134d8..a33cfe0 100644 --- a/gnome-shell-extensions.spec +++ b/gnome-shell-extensions.spec @@ -19,13 +19,13 @@ %global __requires_exclude typelib\\(Meta\\) Name: gnome-shell-extensions -Version: 3.26.1 +Version: 3.26.2 Release: 0 Summary: A collection of extensions for GNOME Shell License: GPL-2.0+ Group: System/GUI/GNOME -Url: http://live.gnome.org/GnomeShell/Extensions -Source: http://download.gnome.org/sources/gnome-shell-extensions/3.26/%{name}-%{version}.tar.xz +Url: https://wiki.gnome.org/Projects/GnomeShell/Extensions +Source: https://download.gnome.org/sources/gnome-shell-extensions/3.26/%{name}-%{version}.tar.xz Source1: README.SUSE Source2: sle-classic.desktop Source3: SLE-theme.tar.gz From f826bb2e1ddff3d3456e8d743eae3f69ba30c34f98f719551de80086c74c1086 Mon Sep 17 00:00:00 2001 From: Dominique Leuenberger Date: Tue, 7 Nov 2017 09:42:17 +0000 Subject: [PATCH 2/2] Accepting request 539426 from home:xiaoguang_wang:branches:GNOME:Factory - Move SLE-Classic function in gnome-shell to gnome-shell-extensions (bsc#1065611). + Update gnome-shell-add-app-to-desktop.patch + Update gse-sle-classic-ext.patch + Update sle-classic-favorites-menu-at-end.patch + Update sle-classic-xorg.desktop + Update sle-classic.desktop + Add sle-classic.json + Add sle-classic@suse.com.tar.gz OBS-URL: https://build.opensuse.org/request/show/539426 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gnome-shell-extensions?expand=0&rev=152 --- gnome-shell-add-app-to-desktop.patch | 17 +- gnome-shell-extensions.changes | 13 + gnome-shell-extensions.spec | 12 + gse-sle-classic-ext.patch | 781 +++++++----------------- sle-classic-favorites-menu-at-end.patch | 28 +- sle-classic-xorg.desktop | 2 +- sle-classic.desktop | 2 +- sle-classic.json | 18 + sle-classic@suse.com.tar.gz | 3 + 9 files changed, 278 insertions(+), 598 deletions(-) create mode 100644 sle-classic.json create mode 100644 sle-classic@suse.com.tar.gz diff --git a/gnome-shell-add-app-to-desktop.patch b/gnome-shell-add-app-to-desktop.patch index 7e8aa64..2558956 100644 --- a/gnome-shell-add-app-to-desktop.patch +++ b/gnome-shell-add-app-to-desktop.patch @@ -1,7 +1,7 @@ -diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js -index 2f4002a..ed51e0c 100644 ---- a/extensions/apps-menu/extension.js -+++ b/extensions/apps-menu/extension.js +Index: gnome-shell-extensions-3.26.1/extensions/apps-menu/extension.js +=================================================================== +--- gnome-shell-extensions-3.26.1.orig/extensions/apps-menu/extension.js ++++ gnome-shell-extensions-3.26.1/extensions/apps-menu/extension.js @@ -7,6 +7,8 @@ const Lang = imports.lang; const Shell = imports.gi.Shell; const St = imports.gi.St; @@ -11,7 +11,7 @@ index 2f4002a..ed51e0c 100644 const Main = imports.ui.main; const Meta = imports.gi.Meta; const PanelMenu = imports.ui.panelMenu; -@@ -68,9 +70,20 @@ const ApplicationMenuItem = new Lang.Class({ +@@ -68,9 +70,20 @@ const ApplicationMenuItem = new Lang.Cla let textureCache = St.TextureCache.get_default(); let iconThemeChangedId = textureCache.connect('icon-theme-changed', Lang.bind(this, this._updateIcon)); @@ -32,7 +32,7 @@ index 2f4002a..ed51e0c 100644 })); this._updateIcon(); -@@ -92,6 +105,106 @@ const ApplicationMenuItem = new Lang.Class({ +@@ -92,6 +105,105 @@ const ApplicationMenuItem = new Lang.Cla }); }, @@ -108,9 +108,8 @@ index 2f4002a..ed51e0c 100644 + destDirPath = Glib.build_filenamev([GLib.get_home_dir(), "Desktop"]); + } + let destFile = Gio.File.new_for_path(destDirPath + '/' + sourceFile.get_basename()); -+ if (sourceFile.copy(destFile, Gio.FileCopyFlags.OVERWRITE, -+ null, null, null)) { -+ // In order to make the general monitor recognize the setting of metadata, ++ if (sourceFile.copy(destFile, Gio.FileCopyFlags.OVERWRITE, null, null)) { ++ // In order to make the general monitor recognize the setting of metadata, + // this function call should before the setting of unix mode. + destFile.set_attribute_string("metadata::trusted", + "yes", diff --git a/gnome-shell-extensions.changes b/gnome-shell-extensions.changes index 99fa999..39a539b 100644 --- a/gnome-shell-extensions.changes +++ b/gnome-shell-extensions.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Mon Nov 6 01:20:01 UTC 2017 - xwang@suse.com + +- Move SLE-Classic function in gnome-shell to + gnome-shell-extensions (bsc#1065611). + + Update gnome-shell-add-app-to-desktop.patch + + Update gse-sle-classic-ext.patch + + Update sle-classic-favorites-menu-at-end.patch + + Update sle-classic-xorg.desktop + + Update sle-classic.desktop + + Add sle-classic.json + + Add sle-classic@suse.com.tar.gz + ------------------------------------------------------------------- Sat Nov 4 03:09:18 UTC 2017 - luc14n0@linuxmail.org diff --git a/gnome-shell-extensions.spec b/gnome-shell-extensions.spec index a33cfe0..759e805 100644 --- a/gnome-shell-extensions.spec +++ b/gnome-shell-extensions.spec @@ -30,6 +30,8 @@ Source1: README.SUSE Source2: sle-classic.desktop Source3: SLE-theme.tar.gz Source4: sle-classic-xorg.desktop +Source5: sle-classic.json +Source6: sle-classic@suse.com.tar.gz # PATCH-FEATURE-OPENSUSE gnome-shell-add-app-to-desktop.patch bnc#870580 dliang@suse.com -- allow adding app shortcut to desktop easily. Patch1: gnome-shell-add-app-to-desktop.patch # PATCH-FEATURE-SLE sle-classic-favorites-menu-at-end.patch bnc#890989 cxiong@suse.com -- put the favorites at the end of the app catogories for accessibility reason -- cxiong@suse.com bnc#890989 @@ -128,12 +130,19 @@ make %{?_smp_mflags} %if !0%{?is_opensuse} install -m0644 %{SOURCE2} %{buildroot}/%{_datadir}/xsessions/sle-classic.desktop install -m0644 %{SOURCE4} %{buildroot}/%{_datadir}/xsessions/sle-classic-xorg.desktop +cp %{buildroot}/%{_datadir}/gnome-shell/extensions/window-list@gnome-shell-extensions.gcampax.github.com/classic.css \ +%{buildroot}/%{_datadir}/gnome-shell/extensions/window-list@gnome-shell-extensions.gcampax.github.com/sle-classic.css +install -m0644 %{SOURCE5} %{buildroot}/%{_datadir}/gnome-shell/modes/sle-classic.json install -d -m755 %{buildroot}%{_datadir}/wayland-sessions install -m0644 %{SOURCE2} %{buildroot}/%{_datadir}/wayland-sessions/sle-classic.desktop # Install SLE theme tar -xzvf %{SOURCE3} install -d %{buildroot}%{_datadir}/gnome-shell/theme cp SLE-theme/theme/* %{buildroot}%{_datadir}/gnome-shell/theme +#Install sle-classic@suse.com extension +tar -xzvf %{SOURCE6} +install -d %{buildroot}%{_datadir}/gnome-shell/extensions/sle-classic@suse.com +cp sle-classic@suse.com/* %{buildroot}%{_datadir}/gnome-shell/extensions/sle-classic@suse.com # Prepare for 'default.desktop' being update-alternative handled, boo#1039756 mkdir -p %{buildroot}%{_sysconfdir}/alternatives @@ -191,6 +200,9 @@ ln -s %{_sysconfdir}/alternatives/default-waylandsession.desktop %{buildroot}%{_ %{_datadir}/xsessions/default.desktop %{_datadir}/xsessions/sle-classic.desktop %{_datadir}/xsessions/sle-classic-xorg.desktop +%{_datadir}/gnome-shell/extensions/window-list@gnome-shell-extensions.gcampax.github.com/sle-classic.css +%{_datadir}/gnome-shell/modes/sle-classic.json +%{_datadir}/gnome-shell/extensions/sle-classic@suse.com/ %dir %{_datadir}/wayland-sessions %{_datadir}/wayland-sessions/default.desktop %{_datadir}/wayland-sessions/sle-classic.desktop diff --git a/gse-sle-classic-ext.patch b/gse-sle-classic-ext.patch index f16e755..b25d8a2 100644 --- a/gse-sle-classic-ext.patch +++ b/gse-sle-classic-ext.patch @@ -1,7 +1,7 @@ -diff --git a/data/gnome-classic.css b/data/gnome-classic.css -index 5331df9..dcda0db 100644 ---- a/data/gnome-classic.css -+++ b/data/gnome-classic.css +Index: gnome-shell-extensions-3.26.1/data/gnome-classic.css +=================================================================== +--- gnome-shell-extensions-3.26.1.orig/data/gnome-classic.css ++++ gnome-shell-extensions-3.26.1/data/gnome-classic.css @@ -500,7 +500,12 @@ StScrollBar { color: rgba(46, 52, 54, 0.5); } .popup-menu.panel-menu { @@ -106,10 +106,10 @@ index 5331df9..dcda0db 100644 #panel .popup-menu-arrow { width: 0; height: 0; } -diff --git a/extensions/window-list/classic.css b/extensions/window-list/classic.css -index f3c44a3..8096d27 100644 ---- a/extensions/window-list/classic.css -+++ b/extensions/window-list/classic.css +Index: gnome-shell-extensions-3.26.1/extensions/window-list/classic.css +=================================================================== +--- gnome-shell-extensions-3.26.1.orig/extensions/window-list/classic.css ++++ gnome-shell-extensions-3.26.1/extensions/window-list/classic.css @@ -6,7 +6,7 @@ height: 2.25em ; } @@ -151,77 +151,36 @@ index f3c44a3..8096d27 100644 color: #888; box-shadow: inset -1px -1px 1px rgba(0,0,0,0.5); } -diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js -index f01b872..6bd8709 100644 ---- a/extensions/window-list/extension.js -+++ b/extensions/window-list/extension.js -@@ -22,6 +22,8 @@ const _ = Gettext.gettext; - const ICON_TEXTURE_SIZE = 24; - const DND_ACTIVATE_TIMEOUT = 500; +Index: gnome-shell-extensions-3.26.1/extensions/window-list/extension.js +=================================================================== +--- gnome-shell-extensions-3.26.1.orig/extensions/window-list/extension.js ++++ gnome-shell-extensions-3.26.1/extensions/window-list/extension.js +@@ -28,6 +28,401 @@ const GroupingMode = { + ALWAYS: 2 + }; -+const SLEClassicExt = imports.ui.SLEClassicExt; ++function isSLEClassicMode() { ++ return Main.sessionMode.currentMode == "sle-classic" ? true : false; ++} + - const GroupingMode = { - NEVER: 0, - AUTO: 1, -@@ -64,6 +66,9 @@ function _getAppStableSequence(app) { - } - - -+// TODO: not critical, but with `gnome-shell -r` there are `St-CRITICAL` errors -+// shown in stdout, 3 warnings for each existing window. Wrong initialization -+// order? - const WindowContextMenu = new Lang.Class({ - Name: 'WindowContextMenu', - Extends: PopupMenu.PopupMenu, -@@ -113,6 +118,9 @@ const WindowContextMenu = new Lang.Class({ - })); - this.addMenuItem(this._closeItem); - -+ // NOTE add `-boxpointer-gap` to the menu, to align with `PanelMenu`, -+ // totally optional. -+ this.actor.add_style_class_name('bottom-panel-menu'); - this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); - - this.connect('open-state-changed', () => { -@@ -678,6 +686,8 @@ const WorkspaceIndicator = new Lang.Class({ - this.parent(0.0, _("Workspace Indicator"), true); - this.setMenu(new PopupMenu.PopupMenu(this.actor, 0.0, St.Side.BOTTOM)); - this.actor.add_style_class_name('window-list-workspace-indicator'); -+ // NOTE: add `-boxpointer-gap`, totally optional -+ this.menu.actor.add_style_class_name('bottom-panel-menu'); - this.menu.actor.remove_style_class_name('panel-menu'); - - let container = new St.Widget({ layout_manager: new Clutter.BinLayout(), -@@ -782,88 +792,52 @@ const WorkspaceIndicator = new Lang.Class({ - } - }); - --const WindowList = new Lang.Class({ -- Name: 'WindowList', +// NOTE: call `initializeWindowList` explicitly to finish initialization. -+const PureWinList = new Lang.Class({ ++var PureWinList = new Lang.Class({ + Name: 'PureWinList', - -- _init: function(perMonitor, monitor) { ++ + _init: function(perMonitor, monitor, maxWidthFunc) { + // NOTE: in SLE Classic `PureWinList` will NOT use any multiple monitor + // support, the following is kept for use in GNOME Classic as we try to + // unify code for two sides. - this._perMonitor = perMonitor; - this._monitor = monitor; ++ this._perMonitor = perMonitor; ++ this._monitor = monitor; + // NOTE: callback function given by the employer of this PureWinList. + // Since PureWinList can be used various widgets hierarchy, we have to + // leave the calculation of max available width to the employer. + this._getMaxWindowListWidth = maxWidthFunc; - -- this.actor = new St.Widget({ name: 'panel', -- style_class: 'bottom-panel solid', ++ + let layout = new Clutter.BoxLayout({ homogeneous: true }); + this.actor = new St.Widget({ style_class: 'window-list', - reactive: true, -- track_hover: true, -- layout_manager: new Clutter.BinLayout()}); ++ reactive: true, + layout_manager: layout, + x_align: Clutter.ActorAlign.START, + x_expand: true, @@ -233,75 +192,13 @@ index f01b872..6bd8709 100644 + this.actor.layout_manager.spacing = spacing; + })); + this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent)); - this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); - -- let box = new St.BoxLayout({ x_expand: true, y_expand: true }); -- this.actor.add_actor(box); -- -- let layout = new Clutter.BoxLayout({ homogeneous: true }); -- this._windowList = new St.Widget({ style_class: 'window-list', -- reactive: true, -- layout_manager: layout, -- x_align: Clutter.ActorAlign.START, -- x_expand: true, -- y_expand: true }); -- box.add(this._windowList, { expand: true }); -- -- this._windowList.connect('style-changed', Lang.bind(this, -- function() { -- let node = this._windowList.get_theme_node(); -- let spacing = node.get_length('spacing'); -- this._windowList.layout_manager.spacing = spacing; -- })); -- this._windowList.connect('scroll-event', Lang.bind(this, this._onScrollEvent)); -- -- let indicatorsBox = new St.BoxLayout({ x_align: Clutter.ActorAlign.END }); -- box.add(indicatorsBox); -- -- this._workspaceIndicator = new WorkspaceIndicator(); -- indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true }); -- -- this._mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter' }); -- this._workspaceSettings = this._getWorkspaceSettings(); -- this._workspacesOnlyOnPrimaryChangedId = -- this._workspaceSettings.connect('changed::workspaces-only-on-primary', -- Lang.bind(this, this._updateWorkspaceIndicatorVisibility)); -- this._dynamicWorkspacesSettings = this._getDynamicWorkspacesSettings(); -- this._dynamicWorkspacesChangedId = -- this._dynamicWorkspacesSettings.connect('changed::dynamic-workspaces', -- Lang.bind(this, this._updateWorkspaceIndicatorVisibility)); -- this._updateWorkspaceIndicatorVisibility(); -- -- this._menuManager = new PopupMenu.PopupMenuManager(this); -- this._menuManager.addMenu(this._workspaceIndicator.menu); -- -- Main.layoutManager.addChrome(this.actor, { affectsStruts: true, -- trackFullscreen: true }); -- Main.uiGroup.set_child_above_sibling(this.actor, Main.layoutManager.panelBox); -- 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._keyboardVisiblechangedId = -- Main.layoutManager.connect('keyboard-visible-changed', -- Lang.bind(this, function(o, state) { -- Main.layoutManager.keyboardBox.visible = state; -- let keyboardBox = Main.layoutManager.keyboardBox; -- keyboardBox.visible = state; -- if (state) -- Main.uiGroup.set_child_above_sibling(this.actor, keyboardBox); -- else -- Main.uiGroup.set_child_above_sibling(this.actor, -- Main.layoutManager.panelBox); -- this._updateKeyboardAnchor(); -- })); ++ this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); ++ ++ this._appSystem = Shell.AppSystem.get_default(); ++ this._appStateChangedId = ++ this._appSystem.connect('app-state-changed', ++ Lang.bind(this, this._onAppStateChanged)); ++ + this._settings = Convenience.getSettings(); + + // Grouping @@ -310,171 +207,101 @@ index f01b872..6bd8709 100644 + Lang.bind(this, this._groupingModeChanged)); + this._grouped = undefined; + // NOTE: do NOT `_checkGrouping` here - ++ + // workspace related - this._workspaceSignals = new Map(); - this._nWorkspacesChangedId = - global.screen.connect('notify::n-workspaces', -@@ -874,42 +848,18 @@ const WindowList = new Lang.Class({ - global.window_manager.connect('switch-workspace', - Lang.bind(this, this._checkGrouping)); - ++ this._workspaceSignals = new Map(); ++ this._nWorkspacesChangedId = ++ global.screen.connect('notify::n-workspaces', ++ Lang.bind(this, this._onWorkspacesChanged)); ++ this._onWorkspacesChanged(); ++ ++ this._switchWorkspaceId = ++ global.window_manager.connect('switch-workspace', ++ Lang.bind(this, this._checkGrouping)); ++ + // Hide and Show with Overview - this._overviewShowingId = - Main.overview.connect('showing', Lang.bind(this, function() { - this.actor.hide(); -- this._updateKeyboardAnchor(); - })); - - this._overviewHidingId = - Main.overview.connect('hiding', Lang.bind(this, function() { -- this.actor.visible = !Main.layoutManager.primaryMonitor.inFullscreen; -- this._updateKeyboardAnchor(); -- })); -- -- this._fullscreenChangedId = -- global.screen.connect('in-fullscreen-changed', Lang.bind(this, function() { -- this._updateKeyboardAnchor(); ++ this._overviewShowingId = ++ Main.overview.connect('showing', Lang.bind(this, function() { ++ this.actor.hide(); ++ })); ++ ++ this._overviewHidingId = ++ Main.overview.connect('hiding', Lang.bind(this, function() { + this.actor.show(); - })); - -- this._dragBeginId = -- Main.xdndHandler.connect('drag-begin', -- Lang.bind(this, this._onDragBegin)); -- this._dragEndId = -- Main.xdndHandler.connect('drag-end', -- Lang.bind(this, this._onDragEnd)); -- this._dragMonitor = { -- dragMotion: Lang.bind(this, this._onDragMotion) -- }; -- -- this._dndTimeoutId = 0; -- this._dndWindow = null; -- -- this._settings = Convenience.getSettings(); -- this._groupingModeChangedId = -- this._settings.connect('changed::grouping-mode', -- Lang.bind(this, this._groupingModeChanged)); -- this._grouped = undefined; -- this._groupingModeChanged(); ++ })); ++ + this._groupingMode = this._settings.get_enum('grouping-mode'); - }, - - _getDynamicWorkspacesSettings: function() { -@@ -918,77 +868,77 @@ const WindowList = new Lang.Class({ - return this._mutterSettings; - }, - -- _getWorkspaceSettings: function() { -- let settings = global.get_overrides_settings(); -- if (settings.list_keys().indexOf('workspaces-only-on-primary') > -1) -- return settings; -- return this._mutterSettings; ++ }, ++ ++ _getDynamicWorkspacesSettings: function() { ++ if (this._workspaceSettings.list_keys().indexOf('dynamic-workspaces') > -1) ++ return this._workspaceSettings; ++ return this._mutterSettings; ++ }, ++ + // NOTE: an API for parent panel to refresh the window list. This is + // necessary as window/app buttons require its parents having allocation and + // positioning *completed* before being properly allocated and positioned + initializeWindowList: function() { + this._groupingModeChanged(); - }, - ++ }, ++ + // NOTE: support scrolling in window list s.t. scrolling activate window + // buttons sequentially. + // + // *Code is rewritten*. - _onScrollEvent: function(actor, event) { - let direction = event.get_scroll_direction(); - let diff = 0; -- if (direction == Clutter.ScrollDirection.DOWN) ++ _onScrollEvent: function(actor, event) { ++ let direction = event.get_scroll_direction(); ++ let diff = 0; + if (direction === Clutter.ScrollDirection.DOWN) - diff = 1; -- else if (direction == Clutter.ScrollDirection.UP) ++ diff = 1; + else if (direction === Clutter.ScrollDirection.UP) - diff = -1; - else - return; - -- let children = this._windowList.get_children().map(function(actor) { ++ diff = -1; ++ else ++ return; ++ + let buttons = this.actor.get_children().map(function(actor) { - return actor._delegate; - }); -- let active = 0; -- for (let i = 0; i < children.length; i++) { -- if (children[i].active) { -- active = i; ++ return actor._delegate; ++ }); + let totalBtnNum = buttons.length; + + let activeBtnIdx = 0 + for (let i = 0; i < totalBtnNum; i++) { + if (buttons[i].active) { + activeBtnIdx = i - break; - } - } - -- active = Math.max(0, Math.min(active + diff, children.length-1)); -- children[active].activate(); -- }, ++ break; ++ } ++ } ++ + // NOTE: bound by `0` and `totalBtnNum - 1`, no wrapping for + // scrolling. + activeBtnIdx = activeBtnIdx + diff; + let noScrollActionNeeded = ( (activeBtnIdx < 0) || (activeBtnIdx >= totalBtnNum) ); + if (noScrollActionNeeded) + return; - -- _updatePosition: function() { -- this.actor.set_position(this._monitor.x, -- this._monitor.y + this._monitor.height - this.actor.height); ++ + // TODO: no need to call `deactivate` for old `active button` ? + buttons[activeBtnIdx].activate(); - }, - -- _updateWorkspaceIndicatorVisibility: function() { -- let hasWorkspaces = this._dynamicWorkspacesSettings.get_boolean('dynamic-workspaces') || -- global.screen.n_workspaces > 1; -- let workspacesOnMonitor = this._monitor == Main.layoutManager.primaryMonitor || -- !this._workspaceSettings.get_boolean('workspaces-only-on-primary'); ++ }, ++ + _onAppStateChanged: function(appSys, app) { + if (!this._grouped) + return; - -- this._workspaceIndicator.actor.visible = hasWorkspaces && workspacesOnMonitor; ++ + if (app.state == Shell.AppState.RUNNING) + this._addApp(app); + else if (app.state == Shell.AppState.STOPPED) + this._removeApp(app); - }, - -- _getPreferredUngroupedWindowListWidth: function() { -- if (this._windowList.get_n_children() == 0) -- return this._windowList.get_preferred_width(-1)[1]; -- -- let children = this._windowList.get_children(); -- let [, childWidth] = children[0].get_preferred_width(-1); -- let spacing = this._windowList.layout_manager.spacing; -- -- let workspace = global.screen.get_active_workspace(); -- 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; ++ }, ++ + _addApp: function(app) { + let button = new AppButton(app, this._perMonitor, this._monitor.index); + this.actor.layout_manager.pack(button.actor, + true, true, true, + Clutter.BoxAlignment.START, + Clutter.BoxAlignment.START) - }, - -- _getMaxWindowListWidth: function() { -- let indicatorsBox = this._workspaceIndicator.actor.get_parent(); -- return this.actor.width - indicatorsBox.get_preferred_width(-1)[1]; ++ }, ++ + _removeApp: function(app) { + let children = this.actor.get_children(); + for (let i = 0; i < children.length; i++) { @@ -483,22 +310,23 @@ index f01b872..6bd8709 100644 + return; + } + } - }, - - _groupingModeChanged: function() { -@@ -997,7 +947,7 @@ const WindowList = new Lang.Class({ - if (this._groupingMode == GroupingMode.AUTO) { - this._checkGrouping(); - } else { -- this._grouped = this._groupingMode == GroupingMode.ALWAYS; ++ }, ++ ++ _groupingModeChanged: function() { ++ this._groupingMode = this._settings.get_enum('grouping-mode'); ++ ++ if (this._groupingMode == GroupingMode.AUTO) { ++ this._checkGrouping(); ++ } else { + this._grouped = ( this._groupingMode === GroupingMode.ALWAYS ); - this._populateWindowList(); - } - }, -@@ -1006,6 +956,26 @@ const WindowList = new Lang.Class({ - if (this._groupingMode != GroupingMode.AUTO) - return; - ++ this._populateWindowList(); ++ } ++ }, ++ ++ _checkGrouping: function() { ++ if (this._groupingMode != GroupingMode.AUTO) ++ return; ++ + // TODO `_getMaxWindowListWidth` is known to depend on parent + // conditions. However the following call seems to get the right parent + // value. So an option to avoid timing issue is to use the following @@ -519,106 +347,84 @@ index f01b872..6bd8709 100644 + // not need to send re-allocation request up.). Then the re-allocation + // signal is sent down to its origin. (downward propagation is necessary + // as much of the positioning and allocation depends on one's parent) - let maxWidth = this._getMaxWindowListWidth(); - let natWidth = this._getPreferredUngroupedWindowListWidth(); - -@@ -1017,7 +987,7 @@ const WindowList = new Lang.Class({ - }, - - _populateWindowList: function() { -- this._windowList.destroy_all_children(); ++ let maxWidth = this._getMaxWindowListWidth(); ++ let natWidth = this._getPreferredUngroupedWindowListWidth(); ++ ++ let grouped = (maxWidth < natWidth); ++ if (this._grouped !== grouped) { ++ this._grouped = grouped; ++ this._populateWindowList(); ++ } ++ }, ++ ++ _populateWindowList: function() { + this.actor.destroy_all_children(); - - if (!this._grouped) { - let windows = global.get_window_actors().sort( -@@ -1038,42 +1008,8 @@ const WindowList = new Lang.Class({ - } - }, - -- _updateKeyboardAnchor: function() { -- if (!Main.keyboard.actor) -- return; -- -- let anchorY = Main.overview.visible ? 0 : this.actor.height; -- Main.keyboard.actor.anchor_y = anchorY; -- }, -- -- _onAppStateChanged: function(appSys, app) { -- if (!this._grouped) -- return; -- -- if (app.state == Shell.AppState.RUNNING) -- this._addApp(app); -- else if (app.state == Shell.AppState.STOPPED) -- this._removeApp(app); -- }, -- -- _addApp: function(app) { -- let button = new AppButton(app, this._perMonitor, this._monitor.index); -- this._windowList.layout_manager.pack(button.actor, -- true, true, true, -- Clutter.BoxAlignment.START, -- Clutter.BoxAlignment.START); -- }, -- -- _removeApp: function(app) { -- let children = this._windowList.get_children(); -- for (let i = 0; i < children.length; i++) { -- if (children[i]._delegate.app == app) { -- children[i].destroy(); -- return; -- } -- } -- }, -- ++ ++ if (!this._grouped) { ++ let windows = global.get_window_actors().sort( ++ function(w1, w2) { ++ return w1.metaWindow.get_stable_sequence() - ++ w2.metaWindow.get_stable_sequence(); ++ }); ++ for (let i = 0; i < windows.length; i++) ++ this._onWindowAdded(null, windows[i].metaWindow); ++ } else { ++ let apps = this._appSystem.get_running().sort( ++ function(a1, a2) { ++ return _getAppStableSequence(a1) - ++ _getAppStableSequence(a2); ++ }); ++ for (let i = 0; i < apps.length; i++) ++ this._addApp(apps[i]); ++ } ++ }, ++ + // NOTE the `ws` params in the following two are not used (necessarily be + // here as the event handler Interface dictates). - _onWindowAdded: function(ws, win) { - if (win.skip_taskbar) - return; -@@ -1084,30 +1020,32 @@ const WindowList = new Lang.Class({ - if (this._grouped) - return; - -- let children = this._windowList.get_children(); ++ _onWindowAdded: function(ws, win) { ++ if (win.skip_taskbar) ++ return; ++ ++ if (!this._grouped) ++ this._checkGrouping(); ++ ++ if (this._grouped) ++ return; ++ + let children = this.actor.get_children(); - for (let i = 0; i < children.length; i++) { - if (children[i]._delegate.metaWindow == win) - return; - } - - let button = new WindowButton(win, this._perMonitor, this._monitor.index); -- this._windowList.layout_manager.pack(button.actor, -- true, true, true, -- Clutter.BoxAlignment.START, -- Clutter.BoxAlignment.START); ++ for (let i = 0; i < children.length; i++) { ++ if (children[i]._delegate.metaWindow == win) ++ return; ++ } ++ ++ let button = new WindowButton(win, this._perMonitor, this._monitor.index); + this.actor.layout_manager.pack(button.actor, + true, true, true, + Clutter.BoxAlignment.START, + Clutter.BoxAlignment.START); - }, - - _onWindowRemoved: function(ws, win) { - if (this._grouped) - this._checkGrouping(); - ++ }, ++ ++ _onWindowRemoved: function(ws, win) { ++ if (this._grouped) ++ this._checkGrouping(); ++ + // NOTE: if it's still grouped after `checking`, do nothing, window + // removal is managed by `AppButton` anyway. - if (this._grouped) - return; - - if (win.get_compositor_private()) - return; // not actually removed, just moved to another workspace - -- let children = this._windowList.get_children(); ++ if (this._grouped) ++ return; ++ ++ if (win.get_compositor_private()) ++ return; // not actually removed, just moved to another workspace ++ + let children = this.actor.get_children(); - for (let i = 0; i < children.length; i++) { - if (children[i]._delegate.metaWindow == win) { - children[i].destroy(); -@@ -1116,6 +1054,28 @@ const WindowList = new Lang.Class({ - } - }, - ++ for (let i = 0; i < children.length; i++) { ++ if (children[i]._delegate.metaWindow == win) { ++ children[i].destroy(); ++ return; ++ } ++ } ++ }, ++ + _getPreferredUngroupedWindowListWidth: function() { + if (this.actor.get_n_children() == 0) + return this.actor.get_preferred_width(-1)[1]; @@ -641,22 +447,35 @@ index f01b872..6bd8709 100644 + return nWindows * childWidth + (nWindows - 1) * spacing; + }, + - _onWorkspacesChanged: function() { - let numWorkspaces = global.screen.n_workspaces; - for (let i = 0; i < numWorkspaces; i++) { -@@ -1132,8 +1092,6 @@ const WindowList = new Lang.Class({ - Lang.bind(this, this._onWindowRemoved)); - this._workspaceSignals.set(workspace, signals); - } -- -- this._updateWorkspaceIndicatorVisibility(); - }, - - _disconnectWorkspaceSignals: function() { -@@ -1147,6 +1105,157 @@ const WindowList = new Lang.Class({ - } - }, - ++ _onWorkspacesChanged: function() { ++ let numWorkspaces = global.screen.n_workspaces; ++ for (let i = 0; i < numWorkspaces; i++) { ++ let workspace = global.screen.get_workspace_by_index(i); ++ if (this._workspaceSignals.has(workspace)) ++ continue; ++ ++ let signals = { windowAddedId: 0, windowRemovedId: 0 }; ++ signals._windowAddedId = ++ workspace.connect_after('window-added', ++ Lang.bind(this, this._onWindowAdded)); ++ signals._windowRemovedId = ++ workspace.connect('window-removed', ++ Lang.bind(this, this._onWindowRemoved)); ++ this._workspaceSignals.set(workspace, signals); ++ } ++ }, ++ ++ _disconnectWorkspaceSignals: function() { ++ let numWorkspaces = global.screen.n_workspaces; ++ for (let i = 0; i < numWorkspaces; i++) { ++ let workspace = global.screen.get_workspace_by_index(i); ++ let signals = this._workspaceSignals.get(workspace); ++ this._workspaceSignals.delete(workspace); ++ workspace.disconnect(signals._windowAddedId); ++ workspace.disconnect(signals._windowRemovedId); ++ } ++ }, ++ + _onDestroy: function() { + Main.overview.disconnect(this._overviewHidingId); + this._overviewHidingId = 0; @@ -681,191 +500,7 @@ index f01b872..6bd8709 100644 + } +}); + -+// NOTE: the following so-called `WindowList` is actually a bottom panel. The -+// "list of windows" part is going to be factored out into `PureWinList`, -+// specially designed to adapt this extension for use with `SLE-Classic` mode. -+const WindowList = new Lang.Class({ -+ Name: 'WindowList', -+ -+ _init: function(perMonitor, monitor) { -+ this._perMonitor = perMonitor; -+ this._monitor = monitor; -+ -+ this.actor = new St.Widget({ name: 'panel', -+ style_class: 'bottom-panel', -+ reactive: true, -+ track_hover: true, -+ layout_manager: new Clutter.BinLayout()}); -+ this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); -+ -+ let box = new St.BoxLayout({ x_expand: true, y_expand: true }); -+ this.actor.add_actor(box); -+ -+ let maxWinListWidthFunc = () => { -+ let indicatorsBox = this._workspaceIndicator.actor.get_parent(); -+ return this.actor.width - indicatorsBox.get_preferred_width(-1)[1]; -+ }; -+ this._windowList = new PureWinList(perMonitor, monitor, maxWinListWidthFunc); -+ box.add(this._windowList.actor, { expand: true }); -+ let _windowListInitId = this.actor.connect('allocation-changed', -+ () => { -+ this._windowList.initializeWindowList(); -+ this.actor.disconnect(_windowListInitId); -+ }); -+ -+ let indicatorsBox = new St.BoxLayout({ x_align: Clutter.ActorAlign.END }); -+ box.add(indicatorsBox); -+ this._workspaceIndicator = new WorkspaceIndicator(); -+ indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true }); -+ -+ this._workspaceSettings = this._getWorkspaceSettings(); -+ 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); -+ -+ Main.layoutManager.addChrome(this.actor, { affectsStruts: true, -+ trackFullscreen: true }); -+ Main.uiGroup.set_child_above_sibling(this.actor, Main.layoutManager.panelBox); -+ 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._keyboardVisiblechangedId = -+ Main.layoutManager.connect('keyboard-visible-changed', -+ Lang.bind(this, function(o, state) { -+ Main.layoutManager.keyboardBox.visible = state; -+ let keyboardBox = Main.layoutManager.keyboardBox; -+ keyboardBox.visible = state; -+ if (state) -+ Main.uiGroup.set_child_above_sibling(this.actor, keyboardBox); -+ else -+ Main.uiGroup.set_child_above_sibling(this.actor, -+ Main.layoutManager.panelBox); -+ this._updateKeyboardAnchor(); -+ })); -+ -+ this._overviewShowingId = -+ Main.overview.connect('showing', Lang.bind(this, function() { -+ this.actor.hide(); -+ this._updateKeyboardAnchor(); -+ })); -+ -+ this._overviewHidingId = -+ Main.overview.connect('hiding', Lang.bind(this, function() { -+ this.actor.visible = !Main.layoutManager.primaryMonitor.inFullscreen; -+ this._updateKeyboardAnchor(); -+ })); -+ -+ this._fullscreenChangedId = -+ global.screen.connect('in-fullscreen-changed', Lang.bind(this, function() { -+ this._updateKeyboardAnchor(); -+ })); -+ -+ this._dragBeginId = -+ Main.xdndHandler.connect('drag-begin', -+ Lang.bind(this, this._onDragBegin)); -+ this._dragEndId = -+ Main.xdndHandler.connect('drag-end', -+ Lang.bind(this, this._onDragEnd)); -+ this._dragMonitor = { -+ dragMotion: Lang.bind(this, this._onDragMotion) -+ }; -+ -+ this._dndTimeoutId = 0; -+ this._dndWindow = null; -+ }, -+ -+ _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' }); -+ }, -+ -+ _updatePosition: function() { -+ this.actor.set_position(this._monitor.x, -+ this._monitor.y + this._monitor.height - this.actor.height); -+ }, -+ -+ _updateWorkspaceIndicatorVisibility: function() { -+ this._workspaceIndicator.actor.visible = -+ this._monitor == Main.layoutManager.primaryMonitor || -+ !this._workspaceSettings.get_boolean('workspaces-only-on-primary'); -+ }, -+ -+ -+ _updateKeyboardAnchor: function() { -+ if (!Main.keyboard.actor) -+ return; -+ -+ let anchorY = Main.overview.visible ? 0 : this.actor.height; -+ Main.keyboard.actor.anchor_y = anchorY; -+ }, -+ - _onDragBegin: function() { - DND.addDragMonitor(this._dragMonitor); - }, -@@ -1202,28 +1311,16 @@ const WindowList = new Lang.Class({ - - _onDestroy: function() { - this._workspaceSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId); -- this._dynamicWorkspacesSettings.disconnect(this._dynamicWorkspacesChangedId); - - this._workspaceIndicator.destroy(); - - Main.ctrlAltTabManager.removeGroup(this.actor); - -- this._appSystem.disconnect(this._appStateChangedId); -- this._appStateChangedId = 0; -- - Main.layoutManager.disconnect(this._keyboardVisiblechangedId); - this._keyboardVisiblechangedId = 0; - - Main.layoutManager.hideKeyboard(); - -- this._disconnectWorkspaceSignals(); -- global.screen.disconnect(this._nWorkspacesChangedId); -- this._nWorkspacesChangedId = 0; -- -- global.window_manager.disconnect(this._switchWorkspaceId); -- this._switchWorkspaceId = 0; -- -- - Main.overview.disconnect(this._overviewShowingId); - Main.overview.disconnect(this._overviewHidingId); - -@@ -1231,12 +1328,6 @@ const WindowList = new Lang.Class({ - - Main.xdndHandler.disconnect(this._dragBeginId); - Main.xdndHandler.disconnect(this._dragEndId); -- -- this._settings.disconnect(this._groupingModeChangedId); -- -- let windows = global.get_window_actors(); -- for (let i = 0; i < windows.length; i++) -- windows[i].metaWindow.set_icon_geometry(null); - } - }); - -@@ -1245,7 +1336,6 @@ const Extension = new Lang.Class({ - - _init: function() { - this._windowLists = null; -- this._injections = {}; - }, - - enable: function() { -@@ -1301,6 +1391,73 @@ const Extension = new Lang.Class({ - } - }); - -+const SCExtension = new Lang.Class({ ++var SCExtension = new Lang.Class({ + Name: 'SCExtension', + _init: function() { + this._pureWinList = null; @@ -902,19 +537,12 @@ index f01b872..6bd8709 100644 + // NOTE: IMO, no need to rebuild `_pureWinList` when monitors changed. + // No need for `showOnAllMonitors` change either even this option + // changes. -+ -+ this._heightChangeId = -+ Main.panel.actor.connect('notify::height', Lang.bind(this, function() { -+ Main.layoutManager.panelBox.set_position(this._pureWinList._monitor.x, -+ this._pureWinList._monitor.y + this._pureWinList._monitor.height - Main.panel.actor.height); -+ })); + }, + + disable: function() { + if (!this._pureWinList) + return; + -+ Main.panel.actor.disconnect(this._heightChangeId); + this._pureWinList.actor.hide(); + this._pureWinList.actor.destroy(); + @@ -926,20 +554,25 @@ index f01b872..6bd8709 100644 + return false; + } +}); -+ + + function _minimizeOrActivateWindow(window) { + let focusWindow = global.display.focus_window; +@@ -1302,5 +1697,10 @@ const Extension = new Lang.Class({ + }); + function init() { - return new Extension(); -+ if ( SLEClassicExt.isSLEClassicMode() ){ ++ if ( isSLEClassicMode() ){ + return new SCExtension(); + } + else { + return new Extension(); + } } -diff --git a/extensions/window-list/stylesheet.css b/extensions/window-list/stylesheet.css -index f5285cb..c207078 100644 ---- a/extensions/window-list/stylesheet.css -+++ b/extensions/window-list/stylesheet.css +Index: gnome-shell-extensions-3.26.1/extensions/window-list/stylesheet.css +=================================================================== +--- gnome-shell-extensions-3.26.1.orig/extensions/window-list/stylesheet.css ++++ gnome-shell-extensions-3.26.1/extensions/window-list/stylesheet.css @@ -79,6 +79,10 @@ border: 1px solid #cccccc; } diff --git a/sle-classic-favorites-menu-at-end.patch b/sle-classic-favorites-menu-at-end.patch index f115f84..af87e74 100644 --- a/sle-classic-favorites-menu-at-end.patch +++ b/sle-classic-favorites-menu-at-end.patch @@ -1,18 +1,20 @@ -Index: gnome-shell-extensions-3.26.0/extensions/apps-menu/extension.js +Index: gnome-shell-extensions-3.26.1/extensions/apps-menu/extension.js =================================================================== ---- gnome-shell-extensions-3.26.0.orig/extensions/apps-menu/extension.js -+++ gnome-shell-extensions-3.26.0/extensions/apps-menu/extension.js -@@ -22,6 +22,8 @@ const Pango = imports.gi.Pango; - const Gettext = imports.gettext.domain('gnome-shell-extensions'); - const _ = Gettext.gettext; +--- gnome-shell-extensions-3.26.1.orig/extensions/apps-menu/extension.js ++++ gnome-shell-extensions-3.26.1/extensions/apps-menu/extension.js +@@ -33,6 +33,10 @@ const HORIZ_FACTOR = 5; + const MENU_HEIGHT_OFFSET = 132; + const NAVIGATION_REGION_OVERSHOOT = 50; -+const SLEClassicExt = imports.ui.SLEClassicExt; ++function isSLEClassicMode() { ++ return Main.sessionMode.currentMode == "sle-classic" ? true : false; ++} + - const ExtensionUtils = imports.misc.extensionUtils; - const Me = ExtensionUtils.getCurrentExtension(); - const Convenience = Me.imports.convenience; -@@ -785,8 +787,6 @@ const ApplicationsButton = new Lang.Clas + const ActivitiesMenuItem = new Lang.Class({ + Name: 'ActivitiesMenuItem', + Extends: PopupMenu.PopupBaseMenuItem, +@@ -790,8 +794,6 @@ const ApplicationsButton = new Lang.Clas let tree = new GMenu.Tree({ menu_basename: 'applications.menu' }); tree.load_sync(); let root = tree.get_root_directory(); @@ -21,13 +23,13 @@ Index: gnome-shell-extensions-3.26.0/extensions/apps-menu/extension.js let iter = root.iter(); let nextType; while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) { -@@ -804,6 +804,10 @@ const ApplicationsButton = new Lang.Clas +@@ -809,6 +811,10 @@ const ApplicationsButton = new Lang.Clas } } + let categoryMenuItem = new CategoryMenuItem(this, null); + this.categoriesBox.insert_child_at_index(categoryMenuItem.actor, -+ SLEClassicExt.isSLEClassicMode() ? -1 : 0); ++ isSLEClassicMode() ? -1 : 0); + //Load applications this._displayButtons(this._listApplications(null)); diff --git a/sle-classic-xorg.desktop b/sle-classic-xorg.desktop index 14ae52f..1271f62 100644 --- a/sle-classic-xorg.desktop +++ b/sle-classic-xorg.desktop @@ -135,7 +135,7 @@ Comment[vi]=Phiên làm việc này đăng nhập bạn vào SLE Cổ điển Comment[zh_CN]=该会话将登录到“SLE 经典模式” Comment[zh_HK]=這個作業階段讓你登入 SLE Classic Comment[zh_TW]=這個作業階段讓您登入 SLE Classic -Exec=env GNOME_SHELL_SESSION_MODE=classic SLE_CLASSIC_MODE=1 gnome-session --session gnome-classic +Exec=env GNOME_SHELL_SESSION_MODE=sle-classic gnome-session --session gnome-classic TryExec=gnome-session Icon= Type=Application diff --git a/sle-classic.desktop b/sle-classic.desktop index a8b401f..91b4373 100644 --- a/sle-classic.desktop +++ b/sle-classic.desktop @@ -135,7 +135,7 @@ Comment[vi]=Phiên làm việc này đăng nhập bạn vào SLE Cổ điển Comment[zh_CN]=该会话将登录到“SLE 经典模式” Comment[zh_HK]=這個作業階段讓你登入 SLE Classic Comment[zh_TW]=這個作業階段讓您登入 SLE Classic -Exec=env GNOME_SHELL_SESSION_MODE=classic SLE_CLASSIC_MODE=1 gnome-session --session gnome-classic +Exec=env GNOME_SHELL_SESSION_MODE=sle-classic gnome-session --session gnome-classic TryExec=gnome-session Icon= Type=Application diff --git a/sle-classic.json b/sle-classic.json new file mode 100644 index 0000000..2d8555a --- /dev/null +++ b/sle-classic.json @@ -0,0 +1,18 @@ +{ + "parentMode": "user", + "stylesheetName": "gnome-classic.css", + "enabledExtensions": [ + "apps-menu@gnome-shell-extensions.gcampax.github.com", + "places-menu@gnome-shell-extensions.gcampax.github.com", + "alternate-tab@gnome-shell-extensions.gcampax.github.com", + "launch-new-instance@gnome-shell-extensions.gcampax.github.com", + "window-list@gnome-shell-extensions.gcampax.github.com", + "workspace-indicator@gnome-shell-extensions.gcampax.github.com", + "sle-classic@suse.com" + ], + "panel": { + "left": ["activities"], + "center": [], + "right": ["a11y", "keyboard", "dateMenu", "aggregateMenu"] + } +} diff --git a/sle-classic@suse.com.tar.gz b/sle-classic@suse.com.tar.gz new file mode 100644 index 0000000..e1cbccf --- /dev/null +++ b/sle-classic@suse.com.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1165506ed6e9a4d79d3573cbe9f1e617bf12b2f15f744444ffad15f99d13684 +size 6969