[gnome-shell] switchMonitor: Only show 'mirror' and 'join' modes when not a laptop



commit 37271ffe709fc957a6c24a28050c279e01e7013a
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Thu Dec 2 22:04:01 2021 +0100

    switchMonitor: Only show 'mirror' and 'join' modes when not a laptop
    
    The 'external only' and 'builtin only' options makes no sense if there
    are only external monitors.
    
    Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3276
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2056>

 js/ui/switchMonitor.js | 63 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 42 insertions(+), 21 deletions(-)
---
diff --git a/js/ui/switchMonitor.js b/js/ui/switchMonitor.js
index 5ac5825224..2d9b0deadf 100644
--- a/js/ui/switchMonitor.js
+++ b/js/ui/switchMonitor.js
@@ -10,26 +10,44 @@ var APP_ICON_SIZE = 96;
 var SwitchMonitorPopup = GObject.registerClass(
 class SwitchMonitorPopup extends SwitcherPopup.SwitcherPopup {
     _init() {
-        let items = [{ icon: 'view-mirror-symbolic',
-                       /* Translators: this is for display mirroring i.e. cloning.
-                        * Try to keep it under around 15 characters.
-                        */
-                       label: _('Mirror') },
-                     { icon: 'video-joined-displays-symbolic',
-                       /* Translators: this is for the desktop spanning displays.
-                        * Try to keep it under around 15 characters.
-                        */
-                       label: _('Join Displays') },
-                     { icon: 'video-single-display-symbolic',
-                       /* Translators: this is for using only an external display.
-                        * Try to keep it under around 15 characters.
-                        */
-                       label: _('External Only') },
-                     { icon: 'computer-symbolic',
-                       /* Translators: this is for using only the laptop display.
-                        * Try to keep it under around 15 characters.
-                        */
-                       label: _('Built-in Only') }];
+        let items = [];
+
+        items.push({
+            icon: 'view-mirror-symbolic',
+            /* Translators: this is for display mirroring i.e. cloning.
+             * Try to keep it under around 15 characters.
+             */
+            label: _('Mirror'),
+            switchMode: Meta.MonitorSwitchConfigType.ALL_MIRROR,
+        });
+
+        items.push({
+            icon: 'video-joined-displays-symbolic',
+            /* Translators: this is for the desktop spanning displays.
+             * Try to keep it under around 15 characters.
+             */
+            label: _('Join Displays'),
+            switchMode: Meta.MonitorSwitchConfigType.ALL_LINEAR,
+        });
+
+        if (global.backend.get_monitor_manager().has_builtin_panel) {
+            items.push({
+                icon: 'video-single-display-symbolic',
+                /* Translators: this is for using only an external display.
+                 * Try to keep it under around 15 characters.
+                 */
+                label: _('External Only'),
+                switchMode: Meta.MonitorSwitchConfigType.EXTERNAL,
+            });
+            items.push({
+                icon: 'computer-symbolic',
+                /* Translators: this is for using only the laptop display.
+                 * Try to keep it under around 15 characters.
+                 */
+                label: _('Built-in Only'),
+                switchMode: Meta.MonitorSwitchConfigType.BUILTIN,
+            });
+        }
 
         super._init(items);
 
@@ -65,7 +83,10 @@ class SwitchMonitorPopup extends SwitcherPopup.SwitcherPopup {
     _finish() {
         super._finish();
 
-        Meta.MonitorManager.get().switch_config(this._selectedIndex);
+        const monitorManager = global.backend.get_monitor_manager();
+        const item = this._items[this._selectedIndex];
+
+        monitorManager.switch_config(item.switchType);
     }
 });
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]