Add setting to force monitor isolation when using a single panel

gh-2355
This commit is contained in:
Charles Gagnon
2025-10-12 19:32:50 -04:00
parent bcdbe125ba
commit 4a9886e6f6
6 changed files with 90 additions and 2 deletions

View File

@@ -695,6 +695,10 @@
<summary>Provide monitor isolation</summary>
<description>Dash shows only windows from the current monitor</description>
</key>
<key type="b" name="isolate-monitors-with-single-panel">
<default>false</default>
<summary>Isolate monitors even with a single panel</summary>
</key>
<key type="b" name="show-favorites-all-monitors">
<default>true</default>
<summary>Display the favorites on all monitors</summary>

View File

@@ -1870,7 +1870,9 @@ export function getInterestingWindows(app, monitor, isolateMonitors) {
if (
monitor &&
(isolateMonitors || SETTINGS.get_boolean('isolate-monitors'))
(isolateMonitors || SETTINGS.get_boolean('isolate-monitors')) &&
(SETTINGS.get_boolean('multi-monitors') ||
SETTINGS.get_boolean('isolate-monitors-with-single-panel'))
) {
windows = windows.filter(function (w) {
return w.get_monitor() == monitor.index

View File

@@ -495,7 +495,9 @@ export const PanelManager = class {
}
let isolateWorkspaces = SETTINGS.get_boolean('isolate-workspaces')
let isolateMonitors = SETTINGS.get_boolean('isolate-monitors')
let isolateMonitors =
!SETTINGS.get_boolean('multi-monitors') ||
SETTINGS.get_boolean('isolate-monitors')
this.focusedApp = app

View File

@@ -184,6 +184,7 @@ const Preferences = class {
this._builder.add_from_file(
this._path + '/ui/BoxIsolateWorkspacesOptions.ui',
)
this._builder.add_from_file(this._path + '/ui/BoxIsolateMonitorsOptions.ui')
// pages
this._builder.add_from_file(this._path + '/ui/SettingsPosition.ui')
@@ -2608,6 +2609,37 @@ const Preferences = class {
Gio.SettingsBindFlags.DEFAULT,
)
this._settings.bind(
'isolate-monitors-with-single-panel',
this._builder.get_object('isolate_monitors_with_single_panel_switch'),
'active',
Gio.SettingsBindFlags.DEFAULT,
)
this._builder
.get_object('isolate_monitors_button')
.connect('clicked', () => {
let scrolledWindow = this._builder.get_object(
'box_isolate_monitors_options',
)
let dialog = this._createPreferencesDialog(
_('Isolate monitors options'),
scrolledWindow,
() => {
// restore default settings
this._settings.set_value(
'isolate-monitors-with-single-panel',
this._settings.get_default_value(
'isolate-monitors-with-single-panel',
),
)
},
)
dialog.show()
})
this._settings.bind(
'overview-click-to-exit',
this._builder.get_object('clicktoexit_switch'),

View File

@@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<interface>
<requires lib="gtk" version="4.18"/>
<requires lib="libadwaita" version="1.2"/>
<object class="GtkScrolledWindow" id="box_isolate_monitors_options">
<property name="height-request">300</property>
<property name="vexpand">True</property>
<property name="width-request">600</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">32</property>
<property name="margin-end">32</property>
<property name="margin-start">32</property>
<property name="margin-top">32</property>
<property name="orientation">vertical</property>
<property name="spacing">24</property>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Isolate monitors even when using a single panel</property>
<child>
<object class="GtkSwitch" id="isolate_monitors_with_single_panel_switch">
<property name="valign">center</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -145,6 +145,20 @@
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Isolate monitors</property>
<child>
<object class="GtkButton" id="isolate_monitors_button">
<property name="receives-default">True</property>
<property name="valign">center</property>
<child>
<object class="GtkImage" id="image_isolate_monitors_options">
<property name="icon-name">emblem-system-symbolic</property>
</object>
</child>
<style>
<class name="circular"/>
</style>
</object>
</child>
<child>
<object class="GtkSwitch" id="multimon_multi_isolate_monitor_switch">
<property name="valign">center</property>