workspace-indicator: Add back plain workspaces menu
Unlike in the top bar, the previews in the menu were not too successful. Change back to a regular menu with a list of workspace names. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/405>
This commit is contained in:
@@ -13,19 +13,10 @@
|
||||
-st-hfade-offset: 20px;
|
||||
}
|
||||
|
||||
.workspace-indicator-menu .workspaces-view {
|
||||
max-width: 480px;
|
||||
}
|
||||
|
||||
.workspace-indicator .workspaces-box {
|
||||
spacing: 3px;
|
||||
}
|
||||
|
||||
.workspace-indicator-menu .workspaces-box {
|
||||
padding: 5px;
|
||||
spacing: 6px;
|
||||
}
|
||||
|
||||
.workspace-indicator .workspace-box {
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
@@ -40,11 +31,6 @@
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.workspace-indicator-menu .workspace-box {
|
||||
spacing: 6px;
|
||||
}
|
||||
|
||||
.workspace-indicator-menu .workspace,
|
||||
.workspace-indicator .workspace {
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px;
|
||||
@@ -55,12 +41,6 @@
|
||||
width: 52px;
|
||||
}
|
||||
|
||||
.workspace-indicator-menu .workspace {
|
||||
height: 80px;
|
||||
width: 160px;
|
||||
}
|
||||
|
||||
.workspace-indicator-menu .workspace.active,
|
||||
.workspace-indicator .workspace.active {
|
||||
border-color: #fff;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import GObject from 'gi://GObject';
|
||||
import Meta from 'gi://Meta';
|
||||
import St from 'gi://St';
|
||||
|
||||
import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||
|
||||
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||
@@ -425,9 +425,68 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
|
||||
constructor(sourceActor) {
|
||||
super(sourceActor, 0.5, St.Side.TOP);
|
||||
|
||||
const previews = new WorkspacePreviews({show_labels: true});
|
||||
this.box.add_child(previews);
|
||||
this.actor.add_style_class_name(`${baseStyleClassName}-menu`);
|
||||
|
||||
this._workspacesSection = new PopupMenu.PopupMenuSection();
|
||||
this.addMenuItem(this._workspacesSection);
|
||||
|
||||
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
||||
this.addAction(_('Settings'), () => {
|
||||
const extension = Extension.lookupByURL(import.meta.url);
|
||||
extension.openPreferences();
|
||||
});
|
||||
|
||||
this._desktopSettings =
|
||||
new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'});
|
||||
this._desktopSettings.connectObject('changed::workspace-names',
|
||||
() => this._updateWorkspaceLabels(), this);
|
||||
|
||||
const {workspaceManager} = global;
|
||||
workspaceManager.connectObject(
|
||||
'notify::n-workspaces', () => this._updateWorkspaceItems(),
|
||||
'workspace-switched', () => this._updateActiveIndicator(),
|
||||
this.actor);
|
||||
this._updateWorkspaceItems();
|
||||
}
|
||||
|
||||
_updateWorkspaceItems() {
|
||||
const {workspaceManager} = global;
|
||||
const {nWorkspaces} = workspaceManager;
|
||||
|
||||
const section = this._workspacesSection.actor;
|
||||
while (section.get_n_children() < nWorkspaces) {
|
||||
const item = new PopupMenu.PopupMenuItem('');
|
||||
item.connect('activate', (o, event) => {
|
||||
const index = [...section].indexOf(item);
|
||||
const workspace = workspaceManager.get_workspace_by_index(index);
|
||||
workspace?.activate(event.get_time());
|
||||
});
|
||||
this._workspacesSection.addMenuItem(item);
|
||||
}
|
||||
|
||||
[...section].splice(nWorkspaces).forEach(item => item.destroy());
|
||||
|
||||
this._updateWorkspaceLabels();
|
||||
this._updateActiveIndicator();
|
||||
}
|
||||
|
||||
_updateWorkspaceLabels() {
|
||||
const items = [...this._workspacesSection.actor];
|
||||
items.forEach(
|
||||
(item, i) => (item.label.text = Meta.prefs_get_workspace_name(i)));
|
||||
}
|
||||
|
||||
_updateActiveIndicator() {
|
||||
const {workspaceManager} = global;
|
||||
const active = workspaceManager.get_active_workspace_index();
|
||||
|
||||
const items = [...this._workspacesSection.actor];
|
||||
items.forEach((item, i) => {
|
||||
item.setOrnament(i === active
|
||||
? PopupMenu.Ornament.CHECK
|
||||
: PopupMenu.Ornament.NONE);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user