Moving current extensions to subdirectory for GNOME 44 as GNOME Shell 45 is backwards incompatible (see Debian #1052112).
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
b42bc882b7
commit
c2040beebc
138 changed files with 4 additions and 1 deletions
|
@ -0,0 +1,251 @@
|
|||
/**
|
||||
* New node file
|
||||
*/
|
||||
|
||||
const { St, Meta } = imports.gi;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Panel = imports.ui.panel;
|
||||
const Layout = imports.ui.layout;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const CE = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = CE.imports.convenience;
|
||||
const MultiMonitors = CE.imports.extension;
|
||||
const MMPanel = CE.imports.mmpanel;
|
||||
|
||||
var SHOW_PANEL_ID = 'show-panel';
|
||||
var ENABLE_HOT_CORNERS = 'enable-hot-corners';
|
||||
|
||||
const MultiMonitorsPanelBox = class MultiMonitorsPanelBox {
|
||||
constructor(monitor) {
|
||||
this.panelBox = new St.BoxLayout({ name: 'panelBox', vertical: true, clip_to_allocation: true });
|
||||
Main.layoutManager.addChrome(this.panelBox, { affectsStruts: true, trackFullscreen: true });
|
||||
this.panelBox.set_position(monitor.x, monitor.y);
|
||||
this.panelBox.set_size(monitor.width, -1);
|
||||
Main.uiGroup.set_child_below_sibling(this.panelBox, Main.layoutManager.panelBox);
|
||||
}
|
||||
|
||||
destroy() {
|
||||
this.panelBox.destroy();
|
||||
}
|
||||
|
||||
updatePanel(monitor) {
|
||||
this.panelBox.set_position(monitor.x, monitor.y);
|
||||
this.panelBox.set_size(monitor.width, -1);
|
||||
}
|
||||
};
|
||||
|
||||
var MultiMonitorsLayoutManager = class MultiMonitorsLayoutManager {
|
||||
constructor() {
|
||||
this._settings = Convenience.getSettings();
|
||||
this._desktopSettings = Convenience.getSettings("org.gnome.desktop.interface");
|
||||
|
||||
Main.mmPanel = [];
|
||||
|
||||
this._monitorIds = [];
|
||||
this.mmPanelBox = [];
|
||||
this.mmappMenu = false;
|
||||
|
||||
this._showAppMenuId = null;
|
||||
this._monitorsChangedId = null;
|
||||
|
||||
this.statusIndicatorsController = null;
|
||||
this._layoutManager_updateHotCorners = null;
|
||||
this._changedEnableHotCornersId = null;
|
||||
}
|
||||
|
||||
showPanel() {
|
||||
if (this._settings.get_boolean(SHOW_PANEL_ID)) {
|
||||
if (!this._monitorsChangedId) {
|
||||
this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', this._monitorsChanged.bind(this));
|
||||
this._monitorsChanged();
|
||||
}
|
||||
if (!this._showAppMenuId) {
|
||||
this._showAppMenuId = this._settings.connect('changed::'+MMPanel.SHOW_APP_MENU_ID, this._showAppMenu.bind(this));
|
||||
}
|
||||
|
||||
if (!this.statusIndicatorsController) {
|
||||
this.statusIndicatorsController = new MMPanel.StatusIndicatorsController();
|
||||
}
|
||||
|
||||
if (!this._layoutManager_updateHotCorners) {
|
||||
this._layoutManager_updateHotCorners = Main.layoutManager._updateHotCorners;
|
||||
|
||||
const _this = this;
|
||||
Main.layoutManager._updateHotCorners = function() {
|
||||
this.hotCorners.forEach((corner) => {
|
||||
if (corner)
|
||||
corner.destroy();
|
||||
});
|
||||
this.hotCorners = [];
|
||||
|
||||
if (!_this._desktopSettings.get_boolean(ENABLE_HOT_CORNERS)) {
|
||||
this.emit('hot-corners-changed');
|
||||
return;
|
||||
}
|
||||
|
||||
let size = this.panelBox.height;
|
||||
|
||||
for (let i = 0; i < this.monitors.length; i++) {
|
||||
let monitor = this.monitors[i];
|
||||
let cornerX = this._rtl ? monitor.x + monitor.width : monitor.x;
|
||||
let cornerY = monitor.y;
|
||||
|
||||
let corner = new Layout.HotCorner(this, monitor, cornerX, cornerY);
|
||||
corner.setBarrierSize(size);
|
||||
this.hotCorners.push(corner);
|
||||
}
|
||||
|
||||
this.emit('hot-corners-changed');
|
||||
};
|
||||
|
||||
if (!this._changedEnableHotCornersId) {
|
||||
this._changedEnableHotCornersId = this._desktopSettings.connect('changed::'+ENABLE_HOT_CORNERS,
|
||||
Main.layoutManager._updateHotCorners.bind(Main.layoutManager));
|
||||
}
|
||||
|
||||
Main.layoutManager._updateHotCorners();
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.hidePanel();
|
||||
}
|
||||
}
|
||||
|
||||
hidePanel() {
|
||||
if (this._changedEnableHotCornersId) {
|
||||
global.settings.disconnect(this._changedEnableHotCornersId);
|
||||
this._changedEnableHotCornersId = null;
|
||||
}
|
||||
|
||||
if (this._layoutManager_updateHotCorners) {
|
||||
Main.layoutManager['_updateHotCorners'] = this._layoutManager_updateHotCorners;
|
||||
this._layoutManager_updateHotCorners = null;
|
||||
Main.layoutManager._updateHotCorners();
|
||||
}
|
||||
|
||||
if (this.statusIndicatorsController) {
|
||||
this.statusIndicatorsController.destroy();
|
||||
this.statusIndicatorsController = null;
|
||||
}
|
||||
|
||||
if (this._showAppMenuId) {
|
||||
this._settings.disconnect(this._showAppMenuId);
|
||||
this._showAppMenuId = null;
|
||||
}
|
||||
this._hideAppMenu();
|
||||
|
||||
if (this._monitorsChangedId) {
|
||||
Main.layoutManager.disconnect(this._monitorsChangedId);
|
||||
this._monitorsChangedId = null;
|
||||
}
|
||||
|
||||
let panels2remove = this._monitorIds.length;
|
||||
for (let i = 0; i < panels2remove; i++) {
|
||||
let monitorId = this._monitorIds.pop();
|
||||
this._popPanel();
|
||||
global.log("remove: "+monitorId);
|
||||
}
|
||||
}
|
||||
|
||||
_monitorsChanged () {
|
||||
let monitorChange = Main.layoutManager.monitors.length - this._monitorIds.length -1;
|
||||
if (monitorChange<0) {
|
||||
for (let idx = 0; idx<-monitorChange; idx++) {
|
||||
let monitorId = this._monitorIds.pop();
|
||||
this._popPanel();
|
||||
global.log("remove: "+monitorId);
|
||||
}
|
||||
}
|
||||
|
||||
let j = 0;
|
||||
let tIndicators = false;
|
||||
for (let i = 0; i < Main.layoutManager.monitors.length; i++) {
|
||||
if (i!=Main.layoutManager.primaryIndex) {
|
||||
let monitor = Main.layoutManager.monitors[i];
|
||||
let monitorId = "i"+i+"x"+monitor.x+"y"+monitor.y+"w"+monitor.width+"h"+monitor.height;
|
||||
if (monitorChange>0 && j==this._monitorIds.length) {
|
||||
this._monitorIds.push(monitorId);
|
||||
this._pushPanel(i, monitor);
|
||||
global.log("new: "+monitorId);
|
||||
tIndicators = true;
|
||||
}
|
||||
else if (this._monitorIds[j]>monitorId || this._monitorIds[j]<monitorId) {
|
||||
let oldMonitorId = this._monitorIds[j];
|
||||
this._monitorIds[j]=monitorId;
|
||||
this.mmPanelBox[j].updatePanel(monitor);
|
||||
global.log("update: "+oldMonitorId+">"+monitorId);
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
this._showAppMenu();
|
||||
if (tIndicators && this.statusIndicatorsController) {
|
||||
this.statusIndicatorsController.transferIndicators();
|
||||
}
|
||||
}
|
||||
|
||||
_pushPanel(i, monitor) {
|
||||
let mmPanelBox = new MultiMonitorsPanelBox(monitor);
|
||||
let panel = new MMPanel.MultiMonitorsPanel(i, mmPanelBox);
|
||||
|
||||
Main.mmPanel.push(panel);
|
||||
this.mmPanelBox.push(mmPanelBox);
|
||||
}
|
||||
|
||||
_popPanel() {
|
||||
let panel = Main.mmPanel.pop();
|
||||
if (this.statusIndicatorsController) {
|
||||
this.statusIndicatorsController.transferBack(panel);
|
||||
}
|
||||
let mmPanelBox = this.mmPanelBox.pop();
|
||||
mmPanelBox.destroy();
|
||||
}
|
||||
|
||||
_changeMainPanelAppMenuButton(appMenuButton) {
|
||||
let role = "appMenu";
|
||||
let panel = Main.panel;
|
||||
let indicator = panel.statusArea[role];
|
||||
panel.menuManager.removeMenu(indicator.menu);
|
||||
indicator.destroy();
|
||||
if (indicator._actionGroupNotifyId) {
|
||||
indicator._targetApp.disconnect(indicator._actionGroupNotifyId);
|
||||
indicator._actionGroupNotifyId = 0;
|
||||
}
|
||||
if (indicator._busyNotifyId) {
|
||||
indicator._targetApp.disconnect(indicator._busyNotifyId);
|
||||
indicator._busyNotifyId = 0;
|
||||
}
|
||||
if (indicator.menu._windowsChangedId) {
|
||||
indicator.menu._app.disconnect(indicator.menu._windowsChangedId);
|
||||
indicator.menu._windowsChangedId = 0;
|
||||
}
|
||||
indicator = new appMenuButton(panel);
|
||||
panel.statusArea[role] = indicator;
|
||||
let box = panel._leftBox;
|
||||
panel._addToPanelBox(role, indicator, box.get_n_children()+1, box);
|
||||
}
|
||||
|
||||
_showAppMenu() {
|
||||
if (this._settings.get_boolean(MMPanel.SHOW_APP_MENU_ID) && Main.mmPanel.length>0) {
|
||||
if (!this.mmappMenu) {
|
||||
this._changeMainPanelAppMenuButton(MMPanel.MultiMonitorsAppMenuButton);
|
||||
this.mmappMenu = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
this._hideAppMenu();
|
||||
}
|
||||
}
|
||||
|
||||
_hideAppMenu() {
|
||||
if (this.mmappMenu) {
|
||||
this._changeMainPanelAppMenuButton(Panel.AppMenuButton);
|
||||
this.mmappMenu = false;
|
||||
Main.panel._updatePanel()
|
||||
}
|
||||
}
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue