altTab: Check for reentrancy in override function of _onItemMotion()
Just like in the parent _onItemMotion() function, we should check for reentrancy in our override. Because the hover timeout will prevent a new selection from happening for some time, in addition to checking for this._highlighted reentrancy, we also need to track the item that's being hovered during the timeout. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2098>
This commit is contained in:
parent
1e2a10f83b
commit
7f65fa49db
@ -707,6 +707,7 @@ class AppSwitcher extends SwitcherPopup.SwitcherList {
|
||||
}
|
||||
|
||||
this._altTabPopup = altTabPopup;
|
||||
this._delayedHighlighted = -1;
|
||||
this._mouseTimeOutId = 0;
|
||||
|
||||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
@ -792,16 +793,26 @@ class AppSwitcher extends SwitcherPopup.SwitcherList {
|
||||
// We override SwitcherList's _onItemMotion method to delay
|
||||
// activation when the thumbnail list is open
|
||||
_onItemMotion(item) {
|
||||
if (item === this._items[this._highlighted] ||
|
||||
item === this._items[this._delayedHighlighted])
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
const index = this._items.indexOf(item);
|
||||
|
||||
if (this._mouseTimeOutId != 0)
|
||||
if (this._mouseTimeOutId !== 0) {
|
||||
GLib.source_remove(this._mouseTimeOutId);
|
||||
this._delayedHighlighted = -1;
|
||||
this._mouseTimeOutId = 0;
|
||||
}
|
||||
|
||||
if (this._altTabPopup.thumbnailsVisible) {
|
||||
this._delayedHighlighted = index;
|
||||
this._mouseTimeOutId = GLib.timeout_add(
|
||||
GLib.PRIORITY_DEFAULT,
|
||||
APP_ICON_HOVER_TIMEOUT,
|
||||
() => {
|
||||
this._enterItem(index);
|
||||
this._delayedHighlighted = -1;
|
||||
this._mouseTimeOutId = 0;
|
||||
return GLib.SOURCE_REMOVE;
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user