mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-17 23:24:51 +00:00
screenShield: Fix pointer motion signal handler leak
The screen shield code listens for motion events on the stage so that it can hide the pointer until the user moves the mouse. Unfortunately, if the user never moves the mouse, the signal handler connection gets leaked. This commit makes sure the connection gets disconnected when the shield goes away. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1459
This commit is contained in:
parent
2b44fa893f
commit
6758746f25
1 changed files with 21 additions and 10 deletions
|
|
@ -336,6 +336,25 @@ var ScreenShield = class {
|
|||
}
|
||||
}
|
||||
|
||||
_showPointer() {
|
||||
this._cursorTracker.set_pointer_visible(true);
|
||||
|
||||
if (this._motionId) {
|
||||
global.stage.disconnect(this._motionId);
|
||||
this._motionId = 0;
|
||||
}
|
||||
}
|
||||
|
||||
_hidePointerUntilMotion() {
|
||||
this._motionId = global.stage.connect('captured-event', (stage, event) => {
|
||||
if (event.type() === Clutter.EventType.MOTION)
|
||||
this._showPointer();
|
||||
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
});
|
||||
this._cursorTracker.set_pointer_visible(false);
|
||||
}
|
||||
|
||||
_hideLockScreen(animate) {
|
||||
if (this._lockScreenState == MessageTray.State.HIDDEN)
|
||||
return;
|
||||
|
|
@ -364,7 +383,7 @@ var ScreenShield = class {
|
|||
this._hideLockScreenComplete();
|
||||
}
|
||||
|
||||
this._cursorTracker.set_pointer_visible(true);
|
||||
this._showPointer();
|
||||
}
|
||||
|
||||
_ensureUnlockDialog(allowCancel) {
|
||||
|
|
@ -435,15 +454,7 @@ var ScreenShield = class {
|
|||
}
|
||||
|
||||
_lockScreenShown(params) {
|
||||
let motionId = global.stage.connect('captured-event', (stage, event) => {
|
||||
if (event.type() === Clutter.EventType.MOTION) {
|
||||
this._cursorTracker.set_pointer_visible(true);
|
||||
global.stage.disconnect(motionId);
|
||||
}
|
||||
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
});
|
||||
this._cursorTracker.set_pointer_visible(false);
|
||||
this._hidePointerUntilMotion();
|
||||
|
||||
this._lockScreenState = MessageTray.State.SHOWN;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue