altTab: Only create one settings instance per window switcher popup
Every settings instance we create is a round-trip to the dconf daemon, so we need to be careful of not creating them too haphazardly. https://bugzilla.gnome.org/show_bug.cgi?id=707806
This commit is contained in:
parent
15cfb9d1d9
commit
1edb9f7525
@ -355,10 +355,13 @@ const WindowSwitcherPopup = new Lang.Class({
|
|||||||
Name: 'WindowSwitcherPopup',
|
Name: 'WindowSwitcherPopup',
|
||||||
Extends: SwitcherPopup.SwitcherPopup,
|
Extends: SwitcherPopup.SwitcherPopup,
|
||||||
|
|
||||||
|
_init: function(items) {
|
||||||
|
this.parent(items);
|
||||||
|
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
||||||
|
},
|
||||||
|
|
||||||
_getWindowList: function() {
|
_getWindowList: function() {
|
||||||
let settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
||||||
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
|
|
||||||
: null;
|
|
||||||
return global.display.get_tab_list(Meta.TabList.NORMAL, global.screen, workspace);
|
return global.display.get_tab_list(Meta.TabList.NORMAL, global.screen, workspace);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -368,7 +371,8 @@ const WindowSwitcherPopup = new Lang.Class({
|
|||||||
if (windows.length == 0)
|
if (windows.length == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
this._switcherList = new WindowList(windows);
|
let mode = this._settings.get_enum('app-icon-mode');
|
||||||
|
this._switcherList = new WindowList(windows, mode);
|
||||||
this._items = this._switcherList.icons;
|
this._items = this._switcherList.icons;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -663,7 +667,7 @@ const ThumbnailList = new Lang.Class({
|
|||||||
const WindowIcon = new Lang.Class({
|
const WindowIcon = new Lang.Class({
|
||||||
Name: 'WindowIcon',
|
Name: 'WindowIcon',
|
||||||
|
|
||||||
_init: function(window) {
|
_init: function(window, mode) {
|
||||||
this.window = window;
|
this.window = window;
|
||||||
|
|
||||||
this.actor = new St.BoxLayout({ style_class: 'alt-tab-app',
|
this.actor = new St.BoxLayout({ style_class: 'alt-tab-app',
|
||||||
@ -681,8 +685,7 @@ const WindowIcon = new Lang.Class({
|
|||||||
|
|
||||||
this._icon.destroy_all_children();
|
this._icon.destroy_all_children();
|
||||||
|
|
||||||
let settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
switch (mode) {
|
||||||
switch (settings.get_enum('app-icon-mode')) {
|
|
||||||
case AppIconMode.THUMBNAIL_ONLY:
|
case AppIconMode.THUMBNAIL_ONLY:
|
||||||
size = WINDOW_PREVIEW_SIZE;
|
size = WINDOW_PREVIEW_SIZE;
|
||||||
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
|
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
|
||||||
@ -720,7 +723,7 @@ const WindowList = new Lang.Class({
|
|||||||
Name: 'WindowList',
|
Name: 'WindowList',
|
||||||
Extends: SwitcherPopup.SwitcherList,
|
Extends: SwitcherPopup.SwitcherList,
|
||||||
|
|
||||||
_init : function(windows) {
|
_init : function(windows, mode) {
|
||||||
this.parent(true);
|
this.parent(true);
|
||||||
|
|
||||||
this._label = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
|
this._label = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
|
||||||
@ -732,7 +735,7 @@ const WindowList = new Lang.Class({
|
|||||||
|
|
||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
let win = windows[i];
|
let win = windows[i];
|
||||||
let icon = new WindowIcon(win);
|
let icon = new WindowIcon(win, mode);
|
||||||
|
|
||||||
this.addItem(icon.actor, icon.label);
|
this.addItem(icon.actor, icon.label);
|
||||||
this.icons.push(icon);
|
this.icons.push(icon);
|
||||||
|
Loading…
Reference in New Issue
Block a user