gnome-shell/js/ui
Carlos Garnacho 2709f6c102 popupMenu: Refactor focus and key management
With the presence of Clutter.grab(), this behaves differently enough
that needs some redoing. The larger difference is what actors are
eligible for handling events.

In the older code, a PopupMenuManager would ask the grabHelper to
capture events from all the stage, and selectively silence events
on any actor that is not the currently shown popup menu or the
"source" actor for any other popup in the group (i.e. those that
would pop up another menu).

But we don't want to just silence events, we want to emit the
correct set of crossing events when a popup menu is shown or closed,
this requires a backing ClutterGrab() on the currently shown menu.
Since the presence of a grab also affects the ability to have actors
outside the grab area to handle events, the PopupMenuManager now
must detect hovering and focus changes to other menu sources by
handling events on the grabbed popup itself.

Redo the grabbing over Main.pushModal/popModal (i.e. ClutterGrab,
plus keyboard focus restoration) and a captured event handler on
the currently shown menu, to make PopupMenuManager behave as it
is expected with this new kind of grabs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
..
components cleanup: Use logical assignments 2022-01-25 15:21:16 +00:00
status cleanup: Use logical assignments 2022-01-25 15:21:16 +00:00
accessDialog.js modalDialog: Consistently return correct boolean for open() in ModalDialogs 2021-11-17 10:24:47 +00:00
altTab.js altTab: Also use getWindows() for AppSwitcher 2022-01-25 20:03:01 +00:00
animation.js
appDisplay.js appDisplay: Explicitly highlight selected app icon 2022-01-29 01:16:29 +01:00
appFavorites.js
appMenu.js appMenu: Support launching on the non-default GPU 2021-08-16 21:28:22 +00:00
audioDeviceSelection.js audioDeviceSelection: Ensure close() is called with no arguments 2021-04-19 19:12:59 +02:00
background.js background: Don't override synchronous load() with an async version 2022-01-11 21:24:26 +01:00
backgroundMenu.js ui: Rename gnome-control-center to org.gnome.Settings 2022-01-21 10:44:37 -03:00
barLevel.js cleanup: Define GObject accessors in camelCase 2021-02-03 20:19:29 +01:00
boxpointer.js boxPointer: Do not mute key events while showing 2022-01-29 01:16:29 +01:00
calendar.js cleanup: Use logical assignments 2022-01-25 15:21:16 +00:00
checkBox.js
closeDialog.js
ctrlAltTab.js ctrlAltTab: Fix usage of bind_cairo_surface_property 2021-03-08 09:21:25 +00:00
dash.js dash: Fixes wrong separator position 2021-09-01 15:10:14 +00:00
dateMenu.js dateMenu: Port to GWeather 4.0 2022-01-05 04:07:25 +01:00
dialog.js dialog: Ensure action callback is called with no arguments 2021-04-19 19:12:59 +02:00
dnd.js dnd: Use Clutter.grab() for DnD grab 2022-01-29 01:16:30 +01:00
edgeDragAction.js keyboard: Handle edge drag gesture cancellation 2021-02-17 15:45:01 +00:00
endSessionDialog.js endSessionDialog: Only show logout inhibiting apps 2021-02-24 15:31:03 +00:00
environment.js dateMenu: Port to GWeather 4.0 2022-01-05 04:07:25 +01:00
extensionDownloader.js cleanup: Replace non-standard ByteArray module 2021-09-01 14:49:30 +00:00
extensionSystem.js extensionSystem: Ignore spurious disable-extension-version-validation change 2022-01-14 15:23:09 +00:00
focusCaretTracker.js
grabHelper.js grabHelper: Use Clutter.grab() underneath 2022-01-29 01:16:30 +01:00
ibusCandidatePopup.js ibusCandidatePopup: Use plain actor as dummy cursor 2021-06-29 22:47:58 +02:00
iconGrid.js iconGrid: Remove unused spring animation code 2022-01-02 16:24:14 +01:00
inhibitShortcutsDialog.js ui: Rename gnome-control-center to org.gnome.Settings 2022-01-21 10:44:37 -03:00
init.js init: Set console log domain 2021-09-01 14:55:47 +00:00
kbdA11yDialog.js cleanup: Remove empty leading/trailing lines in blocks 2020-11-16 18:04:23 +00:00
keyboard.js keyboard: Ensure chrome input region is updated after slide animation 2021-09-01 18:37:56 +02:00
layout.js Add scaffolding for the new screenshot UI 2022-01-27 22:25:42 +00:00
lightbox.js lightbox: Fix banding issues with the vignette shader 2022-01-27 22:16:50 +01:00
locatePointer.js
lookingGlass.js lookingGlass: Use lookingGlass dialog for modal grab 2022-01-29 01:16:29 +01:00
magnifier.js magnifier: Remove call to dropped Clutter::get_default_frame_rate() 2021-11-16 23:34:38 +00:00
main.js main: Use Clutter.grab() underneath Main.push/popModal 2022-01-29 01:16:29 +01:00
messageList.js messageList: Give focus to next message on delete 2021-12-01 10:19:54 +00:00
messageTray.js cleanup: Use logical assignments 2022-01-25 15:21:16 +00:00
modalDialog.js modalDialog: Make reactive 2022-01-29 01:16:29 +01:00
mpris.js mpris: Hide unused elements to leave more space for the title 2021-02-04 22:42:08 +00:00
notificationDaemon.js notificationDaemon: Fix sound-file support 2021-10-06 17:39:01 +00:00
osdMonitorLabeler.js
osdWindow.js
overview.js overview: Propagate crossing events in cover pane 2022-01-29 01:16:29 +01:00
overviewControls.js overviewControls: Handle keyboard navigation 2022-01-27 22:49:42 +00:00
padOsd.js padOsd: Capture events on itself 2022-01-29 01:16:30 +01:00
pageIndicators.js pageIndicators: Remove animated indicators 2021-02-03 09:55:29 +01:00
panel.js cleanup: Use logical assignments 2022-01-25 15:21:16 +00:00
panelMenu.js cleanup: Use optional chaining and ?? operator 2020-12-02 15:10:29 +00:00
pointerA11yTimeout.js
pointerWatcher.js js: Get idle monitor from backend 2021-05-18 13:42:52 +00:00
popupMenu.js popupMenu: Refactor focus and key management 2022-01-29 01:16:30 +01:00
remoteSearch.js ui: Rename gnome-control-center to org.gnome.Settings 2022-01-21 10:44:37 -03:00
ripples.js
runDialog.js modalDialog: Consistently return correct boolean for open() in ModalDialogs 2021-11-17 10:24:47 +00:00
screenShield.js docs: Use gender-neutral pronouns 2022-01-05 16:34:23 +01:00
screenshot.js screenshot-ui: Add support for disable-save-to-disk 2022-01-27 22:25:42 +00:00
scripting.js scripting: Switch to standard async/await pattern 2020-08-12 15:43:38 +00:00
search.js search: Split out the description highlighter into its own class 2021-12-22 16:47:18 +00:00
searchController.js searchController: Get rid of activePage reference in key handling 2021-02-17 02:31:32 +01:00
sessionMode.js sessionMode: Drop allowExtensions property 2021-10-14 18:40:53 +00:00
shellDBus.js shellDBus: Return error on invalid app IDs 2022-01-25 20:18:35 +01:00
shellEntry.js shellEntry: Don't show "Show Password" menu if entry icon is disabled 2021-07-30 14:17:07 +00:00
shellMountOperation.js cleanup: Use logical assignments 2022-01-25 15:21:16 +00:00
slider.js slider: Use Clutter.grab() for implicit grab 2022-01-29 01:16:29 +01:00
swipeTracker.js swipeTracker: Set up TouchSwipeGesture in the capture phase 2021-11-24 22:33:18 +00:00
switcherPopup.js switcherPopup: Rename _onItemEnter() to _onItemMotion() 2022-01-12 12:25:19 +00:00
switchMonitor.js switchMonitor: Only show 'mirror' and 'join' modes when not a laptop 2021-12-04 16:21:31 +00:00
unlockDialog.js gdmUtil: Enable support for GDM's ChoiceList PAM extension 2022-01-13 15:31:32 -05:00
userWidget.js theme: Don't draw border around symbolic user-icon 2020-12-17 21:46:41 +01:00
welcomeDialog.js modalDialog: Consistently return correct boolean for open() in ModalDialogs 2021-11-17 10:24:47 +00:00
windowAttentionHandler.js
windowManager.js windowManager: Set correct unfullscreen gesture enabled state on startup 2022-01-06 04:53:23 +01:00
windowMenu.js windowMenu: Use consistent terminology 2021-08-18 00:43:12 +02:00
windowPreview.js windowPreview: Make St.Label use single line mode 2021-04-28 14:29:19 +02:00
workspace.js workspace: Move fading minimized windows out of allocation 2021-09-01 15:02:47 +00:00
workspaceAnimation.js workspaceAnimation: Make WorkspaceGroup public 2021-12-22 18:27:07 +00:00
workspacesView.js js: Remove dead code in loginDialog and workspacesView 2022-01-05 15:44:28 +00:00
workspaceSwitcherPopup.js cleanup: Remove empty leading/trailing lines in blocks 2020-11-16 18:04:23 +00:00
workspaceThumbnail.js workspaceThumbnail: Destroy thumbnails on destruction 2021-05-25 12:43:32 -03:00
xdndHandler.js cleanup: Use optional chaining and ?? operator 2020-12-02 15:10:29 +00:00