diff --git a/0001-dash-to-panel-Don-t-create-main-panel-without-a-moni.patch b/0001-dash-to-panel-Don-t-create-main-panel-without-a-moni.patch new file mode 100644 index 0000000..3980319 --- /dev/null +++ b/0001-dash-to-panel-Don-t-create-main-panel-without-a-moni.patch @@ -0,0 +1,114 @@ +From 7b6dbfdd727ce5a5b593394893489bafc02ccea6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 25 Sep 2025 14:18:03 +0200 +Subject: [PATCH] dash-to-panel: Don't create main panel without a monitor + +--- + extensions/dash-to-panel/extension.js | 5 ++-- + extensions/dash-to-panel/panelManager.js | 35 +++++++++++++++++------- + 2 files changed, 28 insertions(+), 12 deletions(-) + +diff --git a/extensions/dash-to-panel/extension.js b/extensions/dash-to-panel/extension.js +index 8ab108f2..8ffff041 100644 +--- a/extensions/dash-to-panel/extension.js ++++ b/extensions/dash-to-panel/extension.js +@@ -111,7 +111,8 @@ function _enable() { + // Pretend I'm the dash: meant to make appgrd swarm animation come from the + // right position of the appShowButton. + oldDash = Main.overview._dash; +- Main.overview._dash = panelManager.primaryPanel.taskbar; ++ if (panelManager.primaryPanel) ++ Main.overview._dash = panelManager.primaryPanel.taskbar; + } + + function disable(reset) { +@@ -141,4 +142,4 @@ function disable(reset) { + (extensionSystem._callExtensionEnable || extensionSystem.enableExtension).call(extensionSystem, UBUNTU_DOCK_UUID); + } + } +-} +\ No newline at end of file ++} +diff --git a/extensions/dash-to-panel/panelManager.js b/extensions/dash-to-panel/panelManager.js +index 20ee12d8..87a85504 100755 +--- a/extensions/dash-to-panel/panelManager.js ++++ b/extensions/dash-to-panel/panelManager.js +@@ -73,16 +73,20 @@ var dtpPanelManager = Utils.defineClass({ + enable: function(reset) { + let dtpPrimaryIndex = Me.settings.get_int('primary-monitor'); + ++ this.allPanels = []; + this.dtpPrimaryMonitor = Main.layoutManager.monitors[dtpPrimaryIndex] || Main.layoutManager.primaryMonitor; + this.proximityManager = new Proximity.ProximityManager(); + + Utils.wrapActor(Main.panel); + Utils.wrapActor(Main.overview.dash || 0); + +- this.primaryPanel = this._createPanel(this.dtpPrimaryMonitor, Me.settings.get_boolean('stockgs-keep-top-panel')); +- this.allPanels = [ this.primaryPanel ]; +- +- this.overview.enable(this.primaryPanel); ++ if (this.dtpPrimaryMonitor) { ++ this.primaryPanel = this._createPanel(this.dtpPrimaryMonitor, Me.settings.get_boolean('stockgs-keep-top-panel')); ++ this.allPanels.push(this.primaryPanel); ++ this.overview.enable(this.primaryPanel); ++ ++ this.setFocusedMonitor(this.dtpPrimaryMonitor); ++ } + + if (Me.settings.get_boolean('multi-monitors')) { + Main.layoutManager.monitors.filter(m => m != this.dtpPrimaryMonitor).forEach(m => { +@@ -121,18 +125,20 @@ var dtpPanelManager = Utils.defineClass({ + } + + this._updatePanelElementPositions(); +- this.setFocusedMonitor(this.dtpPrimaryMonitor); + +- if (this.primaryPanel.checkIfVertical()) { ++ if (this.primaryPanel && this.primaryPanel.checkIfVertical()) { + Main.wm._getPositionForDirection = newGetPositionForDirection; + } + + if (reset) return; + + this._oldViewSelectorAnimateIn = Main.overview.viewSelector._animateIn; +- Main.overview.viewSelector._animateIn = Lang.bind(this.primaryPanel, newViewSelectorAnimateIn); + this._oldViewSelectorAnimateOut = Main.overview.viewSelector._animateOut; +- Main.overview.viewSelector._animateOut = Lang.bind(this.primaryPanel, newViewSelectorAnimateOut); ++ ++ if (this.primaryPanel) { ++ Main.overview.viewSelector._animateIn = Lang.bind(this.primaryPanel, newViewSelectorAnimateIn); ++ Main.overview.viewSelector._animateOut = Lang.bind(this.primaryPanel, newViewSelectorAnimateOut); ++ } + + if (Config.PACKAGE_VERSION > '3.35.1') { + this._oldDoSpringAnimation = AppDisplay.BaseAppView.prototype._doSpringAnimation; +@@ -265,14 +271,23 @@ var dtpPanelManager = Utils.defineClass({ + ); + + Panel.panelBoxes.forEach(c => this._signalsHandler.add( +- [Main.panel[c], 'actor-added', (parent, child) => this._adjustPanelMenuButton(this._getPanelMenuButton(child), this.primaryPanel.monitor, this.primaryPanel.getPosition())] ++ [ ++ Main.panel[c], ++ 'actor-added', ++ (parent, child) => { ++ if (this.primaryPanel) ++ this._adjustPanelMenuButton(this._getPanelMenuButton(child), ++ this.primaryPanel.monitor, this.primaryPanel.getPosition()); ++ } ++ ] + )); + + this._setKeyBindings(true); + }, + + disable: function(reset) { +- this.overview.disable(); ++ if (this.primaryPanel) ++ this.overview.disable(); + this.proximityManager.destroy(); + + this.allPanels.forEach(p => { +-- +2.51.0 + diff --git a/gnome-shell-extensions.spec b/gnome-shell-extensions.spec index 10a2ba3..4feb9e2 100644 --- a/gnome-shell-extensions.spec +++ b/gnome-shell-extensions.spec @@ -6,7 +6,7 @@ Name: gnome-shell-extensions Version: 3.32.1 -Release: 45%{?dist} +Release: 46%{?dist} Summary: Modify and extend GNOME Shell functionality and behavior Group: User Interface/Desktops @@ -65,6 +65,7 @@ Patch0036: apps-menu-custom-layout-manager.patch Patch0037: dash-to-panel-attention-indicator.patch Patch0038: improve-workspace-names.patch Patch0039: 0001-dash-to-panel-Consider-range-around-edges-for-dwelli.patch +Patch0040: 0001-dash-to-panel-Don-t-create-main-panel-without-a-moni.patch %description GNOME Shell Extensions is a collection of extensions providing additional and @@ -580,6 +581,10 @@ cp $RPM_SOURCE_DIR/gnome-classic.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions %changelog +* Thu Oct 16 2025 Florian Müllner - 3.32.1-46 +- Skip creating main panel with no monitor + Resolves: RHEL-110378 + * Thu Oct 16 2025 Florian Müllner - 3.32.1-45 - Fix issues in workspace-names backport Resolves: RHEL-96219