screenshot: Split out disabling cast button
Screencasts can be disabled for various reasons: 1. the service is not available (missing plugin etc.) 2. screencasts are not allowed by the session mode (lock screen etc.) 3. the UI is invoked in screenshot-only mode (portal) Currently each of those conditions is handled in a different code path, which means that later conditions can re-enable the button. There's also an inconsistency whether disabling the button is done via visibility or reactivity, which still allows toggling the hidden button via shortcuts (although a hidden button means that screencasts aren't supported at all, so nothing will be recorded in that case). Address this by updating the button from a dedicated function. Fixes: 671df28a50 ("screenshot: Only handle mode-switch shortcut when supported") Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7358 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3155>
This commit is contained in:
parent
fa81335fe8
commit
d54e17d3d5
@ -1083,6 +1083,7 @@ export const ScreenshotUI = GObject.registerClass({
|
|||||||
|
|
||||||
this._screencastInProgress = false;
|
this._screencastInProgress = false;
|
||||||
this._screencastSupported = false;
|
this._screencastSupported = false;
|
||||||
|
this._currentMode = UIMode.SCREENSHOT;
|
||||||
|
|
||||||
this._screencastProxy = new ScreencastProxy(
|
this._screencastProxy = new ScreencastProxy(
|
||||||
Gio.DBus.session,
|
Gio.DBus.session,
|
||||||
@ -1095,7 +1096,7 @@ export const ScreenshotUI = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._screencastSupported = this._screencastProxy.ScreencastSupported;
|
this._screencastSupported = this._screencastProxy.ScreencastSupported;
|
||||||
this._castButton.visible = this._screencastSupported;
|
this._syncCastButton();
|
||||||
});
|
});
|
||||||
|
|
||||||
this._screencastProxy.connectSignal('Error',
|
this._screencastProxy.connectSignal('Error',
|
||||||
@ -1447,7 +1448,15 @@ export const ScreenshotUI = GObject.registerClass({
|
|||||||
|
|
||||||
_sessionUpdated() {
|
_sessionUpdated() {
|
||||||
this.close(true);
|
this.close(true);
|
||||||
this._castButton.reactive = Main.sessionMode.allowScreencast;
|
}
|
||||||
|
|
||||||
|
_syncCastButton() {
|
||||||
|
const visible = this._screencastSupported;
|
||||||
|
const reactive = visible &&
|
||||||
|
this._currentMode !== UIMode.SCREENSHOT_ONLY &&
|
||||||
|
Main.sessionMode.allowScreencast;
|
||||||
|
|
||||||
|
this._castButton.set({visible, reactive});
|
||||||
}
|
}
|
||||||
|
|
||||||
_syncWindowButtonSensitivity() {
|
_syncWindowButtonSensitivity() {
|
||||||
@ -1549,8 +1558,9 @@ export const ScreenshotUI = GObject.registerClass({
|
|||||||
if (mode === UIMode.SCREENCAST && !this._screencastSupported)
|
if (mode === UIMode.SCREENCAST && !this._screencastSupported)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._currentMode = mode;
|
||||||
this._castButton.checked = mode === UIMode.SCREENCAST;
|
this._castButton.checked = mode === UIMode.SCREENCAST;
|
||||||
this._castButton.reactive = mode !== UIMode.SCREENSHOT_ONLY;
|
this._syncCastButton();
|
||||||
|
|
||||||
if (!this.visible) {
|
if (!this.visible) {
|
||||||
// Screenshot UI is opening from completely closed state
|
// Screenshot UI is opening from completely closed state
|
||||||
|
Loading…
x
Reference in New Issue
Block a user