Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

List View: Allow right-click to open block settings dropdown, add editor setting #50273

Merged
merged 5 commits into from
Dec 14, 2023

Conversation

andrewserong
Copy link
Contributor

@andrewserong andrewserong commented May 3, 2023

What?

Fixes #40287, based on a previous attempt in #41041

This PR adds right-click behaviour to the list view, so that right-clicking on a list view item will open the block settings menu, with the menu positioned over the mouse cursor.

It also adds an editor setting to the post and site editors so that users can disable the setting if they wish.

Why?

The general idea, as raised in #40287, is that in other web apps that people are used to, right-clicking an item opens up a contextual menu that is part of the app. The more that using Gutenberg feels like using an app, the more it might be appropriate that right-click feels like more of an in-app kind of behaviour. That's the idea, at least!

How?

  • Add an allowRightClickOverrides setting in the post and site editors.
  • At the button level in the List View, add an onContextMenu handler, and if the settings allow it, simulate a click on the settings dropdown when the button is right-clicked.

Testing Instructions

  1. In the post editor, add some blocks.
  2. Open up the list view, and right click on an item in the list. The block settings menu should open up.
  3. Multi-select multiple blocks and right click on an item — you should still be able to remove multiple blocks via this dropdown.
  4. Open up the Preferences in the editor, and toggle the right click overrides setting off.
  5. Reload the editor for the change in preferences to take effect.
  6. Check that the browser default context menu opens up when right clicking list view items.
  7. Repeat the above in the site editor.

Screenshots or screencast

Right-click items in the list view:

2023-12-14.13.30.39.mp4

The setting:

Post editor setting Site editor setting
image image
@andrewserong andrewserong added [Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Type] Experimental Experimental feature or API. labels May 3, 2023
@andrewserong andrewserong self-assigned this May 3, 2023
@github-actions
Copy link

github-actions bot commented May 3, 2023

Size Change: +399 B (0%)

Total Size: 1.71 MB

Filename Size Change
build/block-editor/index.min.js 247 kB +187 B (0%)
build/edit-post/index.min.js 32.2 kB +95 B (0%)
build/edit-site/index.min.js 195 kB +80 B (0%)
build/editor/index.min.js 53.7 kB +37 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 964 B
build/annotations/index.min.js 2.71 kB
build/api-fetch/index.min.js 2.29 kB
build/autop/index.min.js 2.11 kB
build/blob/index.min.js 590 B
build/block-directory/index.min.js 7.25 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.29 kB
build/block-editor/content.css 4.28 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/style-rtl.css 15.2 kB
build/block-editor/style.css 15.2 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 228 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 343 B
build/block-library/blocks/form-submission-notification/editor.css 342 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 957 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.75 kB
build/block-library/blocks/gallery/style.css 1.75 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.61 kB
build/block-library/blocks/image/style.css 1.6 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 2.02 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 671 B
build/block-library/blocks/navigation-link/editor.css 672 B
build/block-library/blocks/navigation-link/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.27 kB
build/block-library/blocks/navigation/style.css 2.26 kB
build/block-library/blocks/navigation/view.min.js 1.04 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-featured-image/style-rtl.css 345 B
build/block-library/blocks/post-featured-image/style.css 345 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 312 B
build/block-library/blocks/query/style.css 308 B
build/block-library/blocks/query/view.min.js 647 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 613 B
build/block-library/blocks/search/style.css 613 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 475 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 760 B
build/block-library/blocks/site-logo/editor.css 760 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.49 kB
build/block-library/blocks/social-links/style.css 1.49 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 399 B
build/block-library/blocks/table/editor.css 399 B
build/block-library/blocks/table/style-rtl.css 646 B
build/block-library/blocks/table/style.css 645 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 191 B
build/block-library/blocks/video/style.css 191 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.4 kB
build/block-library/editor.css 12.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 214 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.7 kB
build/block-library/theme-rtl.css 700 B
build/block-library/theme.css 705 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.3 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/components/index.min.js 257 kB
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.8 kB
build/core-commands/index.min.js 2.73 kB
build/core-data/index.min.js 72.7 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 651 B
build/data/index.min.js 8.87 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 462 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/style-rtl.css 7.16 kB
build/edit-post/style.css 7.15 kB
build/edit-site/style-rtl.css 14.7 kB
build/edit-site/style.css 14.7 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.71 kB
build/edit-widgets/style.css 4.71 kB
build/editor/style-rtl.css 4.38 kB
build/editor/style.css 4.38 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.76 kB
build/format-library/style-rtl.css 577 B
build/format-library/style.css 577 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/file.min.js 442 B
build/interactivity/image.min.js 2.15 kB
build/interactivity/index.min.js 12.5 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 791 B
build/interactivity/search.min.js 610 B
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.76 kB
build/keycodes/index.min.js 1.49 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 964 B
build/nux/index.min.js 2.01 kB
build/nux/style-rtl.css 775 B
build/nux/style.css 771 B
build/patterns/index.min.js 5.27 kB
build/patterns/style-rtl.css 564 B
build/patterns/style.css 564 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 1.85 kB
build/preferences/index.min.js 1.26 kB
build/primitives/index.min.js 994 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 994 B
build/react-i18n/index.min.js 631 B
build/react-refresh-entry/index.min.js 9.46 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.71 kB
build/reusable-blocks/index.min.js 2.74 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 10.5 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 1.98 kB
build/token-list/index.min.js 587 B
build/url/index.min.js 3.83 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 967 B
build/warning/index.min.js 259 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@andrewserong
Copy link
Contributor Author

Sometimes, when right-clicking, the other menus don't disappear:

I believe I can reliably reproduce this in the following situation:

  • Have focus outside of the browser window, e.g. in another application like screen sharing software
  • Mouse over the list view but do a right click before doing anything else
  • Notice that the settings menu opens up, but focus isn't shifted to the first item in the list
  • Right click on another list view item — the first popover will not be closed, even though the next one opens up

This appears to be because focus was never in the first popover (or quite possibly within the window at all), so opening another popover doesn't cause the focus outside logic to fire and close the original popover.

I'm not too sure how best to fix this just yet, but one possible idea could be to keep track of an id of the settings menu that's currently open, and when it changes, then close all the other ones? That feels a little state-heavy to me as an idea, so there could be a better way to do it 🤔

@andrewserong
Copy link
Contributor Author

Update: you can replicate the same thing via CMD-click and left clicking on the settings dropdown buttons, so I think there could be an argument for fixing this outside of the right-click use case, too

@andrewserong andrewserong force-pushed the try/allow-right-click-in-list-view branch 2 times, most recently from 8faf37f to 61ef62a Compare May 25, 2023 00:06
@andrewserong
Copy link
Contributor Author

Update: in 61ef62a I've fixed up the initial flicker of the list view row being focused before opening up the settings menu.

The last blocker appears to be the issue of the block settings menu not closing when focus isn't on the browser window. I'll continue digging into that.

@github-actions
Copy link

github-actions bot commented May 25, 2023

Flaky tests detected in 4523767.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/7204841512
📝 Reported issues:

@andrewserong
Copy link
Contributor Author

I've written up an issue for the problem of multiple block settings menus being displayed over in: #50988

@mtias
Copy link
Member

mtias commented Jun 2, 2023

Thanks for picking this one up again! It will be even better when we combine with the new flyout menu component so we can reduce how long the initial state is and group things a bit better

@andrewserong
Copy link
Contributor Author

andrewserong commented Jun 4, 2023

It will be even better when we combine with the new flyout menu component so we can reduce how long the initial state is and group things a bit better

Absolutely! And from the sounds of it, the new DropdownMenu component will likely resolve the outstanding issue in this PR (right clicking other items in the list view sometimes doesn't cause the original dropdown menu to close). My thinking at the moment is to wait for the new component to be ready before attempting to merge this PR, but do let me know if anyone would like to see this right click option land sooner.

@andrewserong
Copy link
Contributor Author

Update: it looks like the refactor to using the v2 of DropdownMenu has encountered some blockers (over in #51400). If it doesn't make it in time for 6.3, then I would recommend we park this PR also for 6.3 due to the bug where multiple dropdown menus sometimes appear / don't close properly. I think it's probably a better idea to ensure the dropdown menu is behaving smoothly before exposing it as the primary UI for right-click within the list view.

Do let me know if anyone feels differently, though, and I can give this PR a rebase / get it as close to ready as it can be for now.

@andrewserong
Copy link
Contributor Author

Update: in 130c0d7, I've had a go at introducing some state in the block editor to track the clientId of the block settings menu that is currently open. If an id is present and it doesn't match a particular block settings menu, then we can force it to close. This seems to fix the issue:

2023-08-31.14.43.36.mp4

That fix is a little beyond the scope of the overall intention behind this PR (introduce right-click support), so I'll open up separate PR(s) for that fix to see if it winds up looking viable, and will link over in #50988. Once that issue is resolved in trunk, we can then rebase this PR and get it ready for review.

@andrewserong
Copy link
Contributor Author

Update: now that #54083 has landed, I've given this a rebase and it seems to mostly be working properly now. I'm not sure if we've 100% eradicated issues involving the block settings menu opening and closing correctly, so it'd be worth giving this a manual test to see how it feels for folks in actual usage.

Copy link
Contributor

@apeatling apeatling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to be working well for me, I could not seem to break it and cause multiple menus to show. It works in both the site and post editor (although didn't work when editing a page -- I think by design).

Not shown in the gif is multi block select which I also confirmed to work correctly.

2023-09-14 14 26 40

@ramonjd
Copy link
Member

ramonjd commented Sep 25, 2023

Tested in FF, Safari, Chrome and Edge

  • Block settings contextual menu appears on right click over list view items (but not image previews or the ellipsis menus)
  • Multiple selected items have the correct, single context menu on right click
  • Menu functionality works (I couldn't test paste styles in FF because I didn't have https running)
2023-09-25.09.52.30.mp4

Pretty impressive!

When you come back to this PR, would it be worth creating a small E2E test that runs through a right mouse click to ensure the context menu appears?

Other than that I'd say it's good to go unless you're waiting on further UX feedback ?


// If no custom position is set, the settings dropdown will be anchored to the
// DropdownMenu toggle button.
if ( ! settingsAnchorRect || ! ownerDocument ) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it that ownerDocument can never be falsy due to the fallback value of {}?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one's slightly subtle — ownerDocument is set via destructuring, so if the fallback value after the assignment operator is {} then ownerDocument will be undefined as it doesn't exist on {} 🙂

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh right, sorry I read that line wrong. {} is the fallback for rowRef?.current 🤦🏻

@@ -86,6 +86,13 @@ export default function EditSitePreferencesModal() {
) }
label={ __( 'Display block breadcrumbs' ) }
/>
<EnableFeature
featureName="allowRightClickOverrides"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To me, enableListViewRightClick or allowListViewContextualMenus or the equivalent specific descriptor might describe the feature. allowRightClickOverrides might be too generic?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question! My thinking was to keep it generic so that if we wish to expand other areas to also have right click overrides, we don't wind up with a proliferation of allowRightClick settings in the preferences 🤔

@mtias
Copy link
Member

mtias commented Nov 24, 2023

After #56481 lands, let's keep this setting in general in both editors.

@andrewserong
Copy link
Contributor Author

After #56481 lands, let's keep this setting in general in both editors.

Thank you, will do!

@andrewserong andrewserong force-pushed the try/allow-right-click-in-list-view branch from a9fc04d to 007a1ed Compare December 14, 2023 02:27
@andrewserong andrewserong requested a review from a team December 14, 2023 02:35
@andrewserong
Copy link
Contributor Author

Now that #56481 has landed, I've given this PR a rebase and retested that it still appears to be working well. So, I think this should be ready for a final review! 🤞

The goal with this PR is that we're adding in right-click in the list view, to open the block settings menu for the currently hovered list view item. In follow-ups we could look at expanding right click behaviour into the editor canvas, and see what might make for good behaviour there, too.

Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked in site and post editors:

✅ With the preferences turned on the list view contextual menu appears on right click. All menu items function as expected.
✅ Turned off, I see the browser contextual menu only.

Works in FF, Safari, Chrome and Edge.

Great stuff!!

I left a comment about being specific about where the menu shows, maybe to set expectations? 😄

@andrewserong
Copy link
Contributor Author

Thanks for reviewing @ramonjd! 🙇

It looks like the e2e failures are legit — it's an unfortunate e2e test that passes for me locally but not in the Github Action because our Github Actions use a different window size to my local environment, and the test expected that the "General" tab in preferences wasn't long enough to cause a scrollbar. I think that test likely needs to be rewritten a little (or at least to have comments added) as it's highly likely to break when adding or removing preferences from the panel. I'll see if I can fix it up for this PR, though.

In terms of functionality in this PR, nothing's breaking, it's just that the test is failing 🙂

@ramonjd
Copy link
Member

ramonjd commented Dec 14, 2023

I kicked them off again, but I think maybe the failing e2e tests in test/e2e/specs/editor/various/a11y.spec.js are related because the preferences pane has been updated?

@ramonjd
Copy link
Member

ramonjd commented Dec 14, 2023

Sorry, my page hadn't updated by the time you wrote the comment!

I think that test likely needs to be rewritten a little (or at least to have comments added) as it's highly likely to break when adding or removing preferences from the panel. I'll see if I can fix it up for this PR, though.

Makes sense, thanks for explaining.

@andrewserong
Copy link
Contributor Author

I've pushed a temporary fix for the e2e test in 35d42be to to hopefully resolve the issue for this PR (assuming the actions pass now!). Separately, it could be good to come up with another way of testing that particular part of the preferences panel as it should ideally test the behaviour but not be dependent on the current content of the preferences panels 🤔

@ramonjd
Copy link
Member

ramonjd commented Dec 14, 2023

Separately, it could be good to come up with another way of testing that particular part of the preferences panel as it should ideally test the behaviour but not be dependent on the current content of the preferences panels

Yeah, that seems like a flakey approach. What you've seems like a good compromise, while still preserving the test.

Thanks!

LGTM

Copy link
Contributor

@apeatling apeatling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gave this another solid test and I couldn't break it, looking good! 👍

@andrewserong
Copy link
Contributor Author

Thanks for the reviews, folks! I'll merge this in and then open up a follow-up issue for ideas for other areas that could benefit from a custom right-click dropdown.

@andrewserong andrewserong merged commit f22603f into trunk Dec 14, 2023
52 checks passed
@andrewserong andrewserong deleted the try/allow-right-click-in-list-view branch December 14, 2023 23:12
@github-actions github-actions bot added this to the Gutenberg 17.4 milestone Dec 14, 2023
@andrewserong
Copy link
Contributor Author

Follow-up issue for discussing other places where right-click could work: #57091

@jameskoster
Copy link
Contributor

Love this!

@richtabor
Copy link
Member

Same! Good stuff!

artemiomorales pushed a commit that referenced this pull request Jan 4, 2024
…tor setting (#50273)

* List View: Allow right-click to open block settings dropdown, add setting

* Fix flicker of focus state when initially right clicking

* Tidy up useSelect

* Fix e2e test (hopefully)

* Update help text for preferences items
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Type] Experimental Experimental feature or API.
7 participants