screenshot: Do not wrongly enable window button

The window button is disabled when
 - there are no windows
 - we are in screen-recording mode
 - the session mode doesn't allow windows

However the last condition is only taken into account when
opening the dialog, but not when switching from recording-
to screenshot mode.

Address this by updating the button's sensitivity in a separate
function, so the different conditions are considered consistently.

Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6990

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2944>
This commit is contained in:
Florian Müllner 2023-09-07 17:59:03 +02:00
parent 8e30158c46
commit 521525948e

View File

@ -1401,6 +1401,16 @@ export const ScreenshotUI = GObject.registerClass({
this._castButton.reactive = Main.sessionMode.allowScreencast;
}
_syncWindowButtonSensitivity() {
const windows =
this._windowSelectors.flatMap(selector => selector.windows());
this._windowButton.reactive =
Main.sessionMode.hasWindows &&
windows.length > 0 &&
!this._castButton.checked;
}
_refreshButtonLayout() {
const buttonLayout = Meta.prefs_get_button_layout();
@ -1517,10 +1527,7 @@ export const ScreenshotUI = GObject.registerClass({
});
}
this._windowButton.reactive =
Main.sessionMode.hasWindows &&
windows.length > 0 &&
!this._castButton.checked;
this._syncWindowButtonSensitivity();
if (!this._windowButton.reactive)
this._selectionButton.checked = true;
@ -1763,9 +1770,7 @@ export const ScreenshotUI = GObject.registerClass({
this._captureButton.remove_style_pseudo_class('cast');
const windows =
this._windowSelectors.flatMap(selector => selector.windows());
this._windowButton.reactive = windows.length > 0;
this._syncWindowButtonSensitivity();
}
}