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._altTabPopup = altTabPopup;
|
||||||
|
this._delayedHighlighted = -1;
|
||||||
this._mouseTimeOutId = 0;
|
this._mouseTimeOutId = 0;
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
@ -792,16 +793,26 @@ class AppSwitcher extends SwitcherPopup.SwitcherList {
|
|||||||
// We override SwitcherList's _onItemMotion method to delay
|
// We override SwitcherList's _onItemMotion method to delay
|
||||||
// activation when the thumbnail list is open
|
// activation when the thumbnail list is open
|
||||||
_onItemMotion(item) {
|
_onItemMotion(item) {
|
||||||
|
if (item === this._items[this._highlighted] ||
|
||||||
|
item === this._items[this._delayedHighlighted])
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
const index = this._items.indexOf(item);
|
const index = this._items.indexOf(item);
|
||||||
|
|
||||||
if (this._mouseTimeOutId != 0)
|
if (this._mouseTimeOutId !== 0) {
|
||||||
GLib.source_remove(this._mouseTimeOutId);
|
GLib.source_remove(this._mouseTimeOutId);
|
||||||
|
this._delayedHighlighted = -1;
|
||||||
|
this._mouseTimeOutId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (this._altTabPopup.thumbnailsVisible) {
|
if (this._altTabPopup.thumbnailsVisible) {
|
||||||
|
this._delayedHighlighted = index;
|
||||||
this._mouseTimeOutId = GLib.timeout_add(
|
this._mouseTimeOutId = GLib.timeout_add(
|
||||||
GLib.PRIORITY_DEFAULT,
|
GLib.PRIORITY_DEFAULT,
|
||||||
APP_ICON_HOVER_TIMEOUT,
|
APP_ICON_HOVER_TIMEOUT,
|
||||||
() => {
|
() => {
|
||||||
this._enterItem(index);
|
this._enterItem(index);
|
||||||
|
this._delayedHighlighted = -1;
|
||||||
this._mouseTimeOutId = 0;
|
this._mouseTimeOutId = 0;
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user