Compare commits

...

13 Commits

Author SHA1 Message Date
Florian Müllner 94eba47358 Bump version to 3.30.1
Update NEWS.
2018-10-08 22:55:05 +02:00
Florian Müllner d34933de0b Update sass submodule 2018-10-08 22:50:52 +02:00
Florian Müllner 9410bdfad6 window-list: Ignore hidden buttons when scrolling
Window lists are per-monitor, so workspaces are implemented by
simply hiding all buttons that correspond to windows/apps on
other workspaces. That means we need to take the visibility
into account when handling scroll-events to switch through the
list, or else we'll end up switching "randomly" between workspaces.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/78
2018-10-06 16:05:46 +00:00
Florian Müllner d424b0f645 window-list: Minor clean-up
Modern javascript has explicit methods for locating the first
element of an array that meets a certain condition, use those
instead of manually looping over the array.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/78
2018-10-06 16:05:46 +00:00
Florian Müllner c0454db0c6 appsMenu: Consider scale-factor in height computation
Actor heights are in physical pixels, while CSS measures are in logical
pixels, so we need to adjust accordingly to prevent the scale factor
from being applied twice.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/102
2018-09-23 17:31:03 +02:00
Florian Müllner 913b2ba691 Bump version to 3.30.0 2018-09-04 00:10:36 +02:00
Florian Müllner ba51869b93 Bump version to 3.29.91
Update NEWS.
2018-08-20 15:48:53 +02:00
Florian Müllner ffe6110ea9 Stop using conditional catch statements
They are a mozilla extension that is going away in SpiderMonkey 60.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/90
2018-08-13 12:00:22 +02:00
Florian Müllner 8b1bcc9fed Bump version to 3.29.90
Update NEWS.
2018-08-01 03:47:30 +02:00
Florian Müllner ebad80c64d Update sass submodule 2018-08-01 03:46:05 +02:00
Florian Müllner 39caf951e0 data: Use override for default alt-tab keybindings
Per-desktop overrides aren't limited to keys in org.gnome.mutter, so
we can use them instead of the alternate-tab extension to default to
the window switcher in the classic session.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
Florian Müllner ecf28e13b4 window-list: Use correct settings schemas
Override schemas are gone (yay!), so we can now simply use the original
schema independent from the used session mode.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
Florian Müllner a01b44f7de data: Replace override schema with per-desktop override
GSettings now recognizes per-desktop overrides that can be used
to change schemas' default values for classic mode, so use that
instead of the separate override schema we currently use with
mutter's custom override mechanism.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
10 changed files with 115 additions and 139 deletions
+27
View File
@@ -1,3 +1,30 @@
3.30.1
======
* apps-menu: Fix height on HiDPI systems [Florian; #102]
* window-list: Only switch between windows on active workspace when scrolling
[Florian; #78]
Contributors:
Florian Müllner
3.30.0
======
* Bump version
3.29.91
=======
* Misc. bug fixes [Florian; #90]
Contributors:
Florian Müllner
3.29.90
=======
* Misc. bug fixes [Florian; #786496]
Contributors:
Florian Müllner
3.29.3 3.29.3
====== ======
* Adjust to global.screen removal [Jonas; #759538] * Adjust to global.screen removal [Jonas; #759538]
@@ -0,0 +1,9 @@
[org.gnome.mutter:GNOME-Classic]
dynamic-workspaces=false
[org.gnome.desktop.wm.preferences:GNOME-Classic]
button-layout='appmenu:minimize,maximize,close'
[org.gnome.desktop.wm.keybindings:GNOME-Classic]
switch-applications=[]
switch-windows=['<Super>Tab','<Alt>Tab']
+2 -2
View File
@@ -59,5 +59,5 @@ custom_target(style + '.css',
install_data(theme_data, install_dir: themedir) install_data(theme_data, install_dir: themedir)
classic_schema = 'org.gnome.shell.extensions.classic-overrides.gschema.xml' classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
install_data(classic_schema, install_dir: schemadir) install_data(classic_override, install_dir: schemadir)
@@ -1,46 +0,0 @@
<schemalist>
<schema id="org.gnome.shell.extensions.classic-overrides"
path="/org/gnome/shell/extensions/classic-overrides/"
gettext-domain="gnome-shell-extensions">
<key name="attach-modal-dialogs" type="b">
<default>true</default>
<summary>Attach modal dialog to the parent window</summary>
<description>
This key overrides the key in org.gnome.mutter when running
GNOME Shell.
</description>
</key>
<key name="button-layout" type="s">
<default>"appmenu:minimize,maximize,close"</default>
<summary>Arrangement of buttons on the titlebar</summary>
<description>
This key overrides the key in org.gnome.desktop.wm.preferences when running GNOME Shell.
</description>
</key>
<key name="edge-tiling" type="b">
<default>true</default>
<summary>Enable edge tiling when dropping windows on screen edges</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
<key name="workspaces-only-on-primary" type="b">
<default>true</default>
<summary>Workspaces only on primary monitor</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
<key name="focus-change-on-pointer-rest" type="b">
<default>true</default>
<summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
</schema>
</schemalist>
+4 -1
View File
@@ -685,7 +685,10 @@ class ApplicationsButton extends PanelMenu.Button {
//Load applications //Load applications
this._displayButtons(this._listApplications(null)); this._displayButtons(this._listApplications(null));
let height = this.categoriesBox.height + MENU_HEIGHT_OFFSET + 'px'; let themeContext = St.ThemeContext.get_for_stage(global.stage);
let scaleFactor = themeContext.scale_factor;
let categoriesHeight = this.categoriesBox.height / scaleFactor;
let height = Math.round(categoriesHeight) + MENU_HEIGHT_OFFSET + 'px';
this.mainBox.style+=('height: ' + height); this.mainBox.style+=('height: ' + height);
} }
+48 -36
View File
@@ -50,33 +50,35 @@ class PlaceInfo {
return (_ignored, result) => { return (_ignored, result) => {
try { try {
Gio.AppInfo.launch_default_for_uri_finish(result); Gio.AppInfo.launch_default_for_uri_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
let source = {
get_icon: () => { return this.icon; }
};
let op = new ShellMountOperation.ShellMountOperation(source);
this.file.mount_enclosing_volume(0, op.mountOp, null, (file, result) => {
try {
op.close();
file.mount_enclosing_volume_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED)) {
// e.g. user canceled the password dialog
return;
} catch(e) {
Main.notifyError(_("Failed to mount volume for “%s”").format(this.name), e.message);
return;
}
if (tryMount) {
let callback = this._createLaunchCallback(launchContext, false);
Gio.AppInfo.launch_default_for_uri_async(file.get_uri(),
launchContext,
null,
callback);
}
});
} catch(e) { } catch(e) {
Main.notifyError(_("Failed to launch “%s”").format(this.name), e.message); if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
let source = {
get_icon: () => { return this.icon; }
};
let op = new ShellMountOperation.ShellMountOperation(source);
this.file.mount_enclosing_volume(0, op.mountOp, null, (file, result) => {
try {
op.close();
file.mount_enclosing_volume_finish(result);
} catch(e) {
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
// e.g. user canceled the password dialog
return;
Main.notifyError(_("Failed to mount volume for “%s”").format(this.name), e.message);
return;
}
if (tryMount) {
let callback = this._createLaunchCallback(launchContext, false);
Gio.AppInfo.launch_default_for_uri_async(file.get_uri(),
launchContext,
null,
callback);
}
});
} else {
Main.notifyError(_("Failed to launch “%s”").format(this.name), e.message);
}
} }
} }
} }
@@ -97,8 +99,10 @@ class PlaceInfo {
let info = file.query_info_finish(result); let info = file.query_info_finish(result);
this.icon = info.get_symbolic_icon(); this.icon = info.get_symbolic_icon();
this.emit('changed'); this.emit('changed');
} catch(e if e instanceof Gio.IOErrorEnum) { } catch(e) {
return; if (e instanceof Gio.IOErrorEnum)
return;
throw e;
} }
}); });
@@ -123,8 +127,10 @@ class PlaceInfo {
try { try {
let info = this.file.query_info('standard::display-name', 0, null); let info = this.file.query_info('standard::display-name', 0, null);
return info.get_display_name(); return info.get_display_name();
} catch(e if e instanceof Gio.IOErrorEnum) { } catch(e) {
return this.file.get_basename(); if (e instanceof Gio.IOErrorEnum)
return this.file.get_basename();
throw e;
} }
} }
}; };
@@ -349,8 +355,10 @@ var PlacesManager = class {
let file = Gio.File.new_for_path(specialPath), info; let file = Gio.File.new_for_path(specialPath), info;
try { try {
info = new PlaceInfo('special', file); info = new PlaceInfo('special', file);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch(e) {
continue; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
continue;
throw e;
} }
specials.push(info); specials.push(info);
@@ -514,8 +522,10 @@ var PlacesManager = class {
try { try {
devItem = new PlaceDeviceInfo(kind, mount); devItem = new PlaceDeviceInfo(kind, mount);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch(e) {
return; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
} }
this._places[kind].push(devItem); this._places[kind].push(devItem);
@@ -526,8 +536,10 @@ var PlacesManager = class {
try { try {
volItem = new PlaceVolumeInfo(kind, volume); volItem = new PlaceVolumeInfo(kind, volume);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch(e) {
return; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
} }
this._places[kind].push(volItem); this._places[kind].push(volItem);
+22 -50
View File
@@ -799,14 +799,12 @@ class WindowList {
indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true }); indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true });
this._mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter' }); this._mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter' });
this._workspaceSettings = this._getWorkspaceSettings();
this._workspacesOnlyOnPrimaryChangedId = this._workspacesOnlyOnPrimaryChangedId =
this._workspaceSettings.connect('changed::workspaces-only-on-primary', this._mutterSettings.connect('changed::workspaces-only-on-primary',
this._updateWorkspaceIndicatorVisibility.bind(this)); this._updateWorkspaceIndicatorVisibility.bind(this));
this._dynamicWorkspacesSettings = this._getDynamicWorkspacesSettings();
this._dynamicWorkspacesChangedId = this._dynamicWorkspacesChangedId =
this._dynamicWorkspacesSettings.connect('changed::dynamic-workspaces', this._mutterSettings.connect('changed::dynamic-workspaces',
this._updateWorkspaceIndicatorVisibility.bind(this)); this._updateWorkspaceIndicatorVisibility.bind(this));
this._updateWorkspaceIndicatorVisibility(); this._updateWorkspaceIndicatorVisibility();
this._menuManager = new PopupMenu.PopupMenuManager(this); this._menuManager = new PopupMenu.PopupMenuManager(this);
@@ -890,19 +888,6 @@ class WindowList {
this._groupingModeChanged(); this._groupingModeChanged();
} }
_getDynamicWorkspacesSettings() {
if (this._workspaceSettings.list_keys().includes('dynamic-workspaces'))
return this._workspaceSettings;
return this._mutterSettings;
}
_getWorkspaceSettings() {
let settings = global.get_overrides_settings() || this._mutterSettings;
if (settings.list_keys().includes('workspaces-only-on-primary'))
return settings;
return this._mutterSettings;
}
_onScrollEvent(actor, event) { _onScrollEvent(actor, event) {
let direction = event.get_scroll_direction(); let direction = event.get_scroll_direction();
let diff = 0; let diff = 0;
@@ -913,17 +898,12 @@ class WindowList {
else else
return; return;
let children = this._windowList.get_children().map(a => a._delegate); let children = this._windowList.get_children()
let active = 0; .filter(c => c.visible)
for (let i = 0; i < children.length; i++) { .map(a => a._delegate);
if (children[i].active) { let active = children.findIndex(c => c.active);
active = i; let newActive = Math.max(0, Math.min(active + diff, children.length-1));
break; children[newActive].activate();
}
}
active = Math.max(0, Math.min(active + diff, children.length-1));
children[active].activate();
} }
_updatePosition() { _updatePosition() {
@@ -933,10 +913,10 @@ class WindowList {
_updateWorkspaceIndicatorVisibility() { _updateWorkspaceIndicatorVisibility() {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
let hasWorkspaces = this._dynamicWorkspacesSettings.get_boolean('dynamic-workspaces') || let hasWorkspaces = this._mutterSettings.get_boolean('dynamic-workspaces') ||
workspaceManager.n_workspaces > 1; workspaceManager.n_workspaces > 1;
let workspacesOnMonitor = this._monitor == Main.layoutManager.primaryMonitor || let workspacesOnMonitor = this._monitor == Main.layoutManager.primaryMonitor ||
!this._workspaceSettings.get_boolean('workspaces-only-on-primary'); !this._mutterSettings.get_boolean('workspaces-only-on-primary');
this._workspaceIndicator.actor.visible = hasWorkspaces && workspacesOnMonitor; this._workspaceIndicator.actor.visible = hasWorkspaces && workspacesOnMonitor;
} }
@@ -1038,12 +1018,9 @@ class WindowList {
_removeApp(app) { _removeApp(app) {
let children = this._windowList.get_children(); let children = this._windowList.get_children();
for (let i = 0; i < children.length; i++) { let child = children.find(c => c._delegate.app == app);
if (children[i]._delegate.app == app) { if (child)
children[i].destroy(); child.destroy();
return;
}
}
} }
_onWindowAdded(ws, win) { _onWindowAdded(ws, win) {
@@ -1057,10 +1034,8 @@ class WindowList {
return; return;
let children = this._windowList.get_children(); let children = this._windowList.get_children();
for (let i = 0; i < children.length; i++) { if (children.find(c => c._delegate.metaWindow == win))
if (children[i]._delegate.metaWindow == win) return;
return;
}
let button = new WindowButton(win, this._perMonitor, this._monitor.index); let button = new WindowButton(win, this._perMonitor, this._monitor.index);
this._windowList.layout_manager.pack(button.actor, this._windowList.layout_manager.pack(button.actor,
@@ -1080,12 +1055,9 @@ class WindowList {
return; // not actually removed, just moved to another workspace return; // not actually removed, just moved to another workspace
let children = this._windowList.get_children(); let children = this._windowList.get_children();
for (let i = 0; i < children.length; i++) { let child = children.find(c => c._delegate.metaWindow == win);
if (children[i]._delegate.metaWindow == win) { if (child)
children[i].destroy(); child.destroy();
return;
}
}
} }
_onWorkspacesChanged() { _onWorkspacesChanged() {
@@ -1177,8 +1149,8 @@ class WindowList {
} }
_onDestroy() { _onDestroy() {
this._workspaceSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId); this._mutterSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId);
this._dynamicWorkspacesSettings.disconnect(this._dynamicWorkspacesChangedId); this._mutterSettings.disconnect(this._dynamicWorkspacesChangedId);
this._workspaceIndicator.destroy(); this._workspaceIndicator.destroy();
+2 -2
View File
@@ -1,5 +1,5 @@
project('gnome-shell-extensions', project('gnome-shell-extensions',
version: '3.29.3', version: '3.30.1',
meson_version: '>= 0.44.0', meson_version: '>= 0.44.0',
license: 'GPL2+' license: 'GPL2+'
) )
@@ -34,7 +34,6 @@ endif
uuid_suffix = '@gnome-shell-extensions.gcampax.github.com' uuid_suffix = '@gnome-shell-extensions.gcampax.github.com'
classic_extensions = [ classic_extensions = [
'alternate-tab',
'apps-menu', 'apps-menu',
'places-menu', 'places-menu',
'launch-new-instance', 'launch-new-instance',
@@ -43,6 +42,7 @@ classic_extensions = [
default_extensions = classic_extensions default_extensions = classic_extensions
default_extensions += [ default_extensions += [
'alternate-tab',
'drive-menu', 'drive-menu',
'screenshot-window-sizer', 'screenshot-window-sizer',
'windowsNavigator', 'windowsNavigator',
-1
View File
@@ -1,6 +1,5 @@
data/gnome-classic.desktop.in data/gnome-classic.desktop.in
data/gnome-classic.session.desktop.in data/gnome-classic.session.desktop.in
data/org.gnome.shell.extensions.classic-overrides.gschema.xml
extensions/alternate-tab/prefs.js extensions/alternate-tab/prefs.js
extensions/apps-menu/extension.js extensions/apps-menu/extension.js
extensions/auto-move-windows/extension.js extensions/auto-move-windows/extension.js