screenshot-ui: Add keyboard navigation
Allow switching the screenshot mode by pressing the "s", "c", or "w" key. Also implement arrow-key navigation between monitors in the screen screenshot mode and between windows in the window screenshot mode. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1954>
This commit is contained in:
parent
1321bb7557
commit
639a346c1e
@ -1400,6 +1400,48 @@ class ScreenshotUI extends St.Widget {
|
|||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (symbol === Clutter.KEY_s || symbol === Clutter.KEY_S) {
|
||||||
|
this._selectionButton.checked = true;
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (symbol === Clutter.KEY_c || symbol === Clutter.KEY_C) {
|
||||||
|
this._screenButton.checked = true;
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._windowButton.reactive &&
|
||||||
|
(symbol === Clutter.KEY_w || symbol === Clutter.KEY_W)) {
|
||||||
|
this._windowButton.checked = true;
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (symbol === Clutter.KEY_Left || symbol === Clutter.KEY_Right ||
|
||||||
|
symbol === Clutter.KEY_Up || symbol === Clutter.KEY_Down) {
|
||||||
|
let direction;
|
||||||
|
if (symbol === Clutter.KEY_Left)
|
||||||
|
direction = St.DirectionType.LEFT;
|
||||||
|
else if (symbol === Clutter.KEY_Right)
|
||||||
|
direction = St.DirectionType.RIGHT;
|
||||||
|
else if (symbol === Clutter.KEY_Up)
|
||||||
|
direction = St.DirectionType.UP;
|
||||||
|
else if (symbol === Clutter.KEY_Down)
|
||||||
|
direction = St.DirectionType.DOWN;
|
||||||
|
|
||||||
|
if (this._windowButton.checked) {
|
||||||
|
const window =
|
||||||
|
this._windowSelectors.flatMap(selector => selector.windows())
|
||||||
|
.find(win => win.checked) ?? null;
|
||||||
|
this.navigate_focus(window, direction, false);
|
||||||
|
} else if (this._screenButton.checked) {
|
||||||
|
const screen =
|
||||||
|
this._screenSelectors.find(selector => selector.checked) ?? null;
|
||||||
|
this.navigate_focus(screen, direction, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
return super.vfunc_key_press_event(event);
|
return super.vfunc_key_press_event(event);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user