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

Shortcuts: don't fire keydown handlers outside block editor content area #37326

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Dec 13, 2021

Let's see if this PR resolves:

Description

Just an experiment. Don't take it too seriously... unless it works that is :trollface:

Prevent block editor keyboard shortcuts where the block editor itself does not have focus.

The concept rides on the claim that we shouldn't fire editor-specific callbacks where the editor area, or its children, are not focussed.

How has this been tested?

When writing/editing in the block editor, you should be able to use all the Block Tool keyboard shortcuts:

Screen Shot 2021-12-14 at 2 32 30 pm

Check that deleting control values in the Block Inspector does not affect the Block Editor:

  1. Add a few paragraph blocks.
  2. Multi-select your new blocks and click on the color selector.
  3. Show the detailed input and delete the content.
  4. Your selected blocks should not disappear.

Screenshots

Before After
before after

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@github-actions
Copy link

github-actions bot commented Dec 13, 2021

Size Change: +1.01 kB (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-editor/index.min.js 140 kB +197 B (0%)
build/block-editor/style-rtl.css 14.6 kB +37 B (0%)
build/block-editor/style.css 14.6 kB +37 B (0%)
build/block-library/blocks/columns/style-rtl.css 502 B -1 B (0%)
build/block-library/blocks/columns/style.css 501 B -1 B (0%)
build/block-library/common-rtl.css 910 B +53 B (+6%) 🔍
build/block-library/common.css 908 B +52 B (+6%) 🔍
build/block-library/editor-rtl.css 10.1 kB +53 B (+1%)
build/block-library/editor.css 10.1 kB +54 B (+1%)
build/block-library/index.min.js 163 kB +297 B (0%)
build/block-library/style-rtl.css 10.8 kB +54 B (+1%)
build/block-library/style.css 10.8 kB +55 B (+1%)
build/block-library/theme-rtl.css 675 B +3 B (0%)
build/block-library/theme.css 679 B +2 B (0%)
build/components/index.min.js 214 kB -311 B (0%)
build/compose/index.min.js 11.2 kB +247 B (+2%)
build/edit-site/index.min.js 35.5 kB +97 B (0%)
build/edit-site/style-rtl.css 6.63 kB +40 B (+1%)
build/edit-site/style.css 6.63 kB +41 B (+1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/columns/editor-rtl.css 210 B
build/block-library/blocks/columns/editor.css 208 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 966 B
build/block-library/blocks/gallery/editor.css 970 B
build/block-library/blocks/gallery/style-rtl.css 1.63 kB
build/block-library/blocks/gallery/style.css 1.62 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 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 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-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.91 kB
build/block-library/blocks/navigation/editor.css 1.91 kB
build/block-library/blocks/navigation/style-rtl.css 1.71 kB
build/block-library/blocks/navigation/style.css 1.7 kB
build/block-library/blocks/navigation/view.min.js 2.79 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 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 172 B
build/block-library/blocks/page-list/style.css 172 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 507 B
build/block-library/blocks/post-comments/style.css 507 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 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 391 B
build/block-library/blocks/post-template/style.css 392 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 389 B
build/block-library/blocks/pullquote/style.css 388 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 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 273 B
build/block-library/blocks/query-pagination/style.css 269 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 772 B
build/block-library/blocks/site-logo/editor.css 772 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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/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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 569 B
build/block-library/blocks/video/editor.css 570 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.4 kB
build/edit-post/style-rtl.css 7.1 kB
build/edit-post/style.css 7.09 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.9 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@ramonjd ramonjd force-pushed the try/prevent-block-editor-key-down-events-when-not-focussed branch from 6155a1b to 5864da5 Compare December 14, 2021 03:28
@ramonjd ramonjd changed the title [WIP] Shortcuts: don't fire keydown handlers outside block editor content area Shortcuts: don't fire keydown handlers outside block editor content area Dec 14, 2021
@ramonjd ramonjd self-assigned this Dec 14, 2021
@ramonjd ramonjd marked this pull request as ready for review December 14, 2021 03:33
@ramonjd ramonjd requested a review from ellatrix as a code owner December 14, 2021 03:33
Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

Thanks so much for diving into this one @ramonjd! This is testing nicely for me in the editor and looks like a good approach to me. I just looked at the failing e2e test, and it appears to be failing for me locally, too with this PR:

image

Not sure if the change in behaviour here has unintentionally affected the widget editor? From my manual testing, the undo behaviour is a little flaky in the widget editor on trunk, too, so I wasn't too sure what the real culprit is there 🤔

To run the e2e test locally, I ran the following in one terminal with wp-env start already running (with npm run dev already running in another terminal for a dev build):

PUPPETEER_HEADLESS="false" npm run test-e2e specs/widgets/editing-widgets.test.js

packages/block-editor/src/components/block-tools/index.js Outdated Show resolved Hide resolved
@ramonjd
Copy link
Member Author

ramonjd commented Dec 14, 2021

Thanks for testing @andrewserong

I just looked at the failing e2e test, and it appears to be failing for me locally, too with this PR:

I saw that failing test and 🤞 that it was another flaky one 🤣 Thanks for looking into it further.

I ran out of time to look at it more closely today. I'll investigate tomorrow.

@ramonjd
Copy link
Member Author

ramonjd commented Dec 14, 2021

Not sure if the change in behaviour here has unintentionally affected the widget editor? From my manual testing, the undo behaviour is a little flaky in the widget editor on trunk, too, so I wasn't too sure what the real culprit is there 🤔

Locally, the tests fails for me even when commenting out the changes in this PR 🕵️ 🤔 I take that back

@ramonjd
Copy link
Member Author

ramonjd commented Dec 14, 2021

Turns out that checking for the ref element before we use it is a good idea 😆

@ramonjd ramonjd force-pushed the try/prevent-block-editor-key-down-events-when-not-focussed branch from 9ead25c to 9b0c546 Compare December 14, 2021 22:09
Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

@ramonjd, I just gave this another test, and it's still working nicely for me in the post editor, but there's another couple of curious cases of uses of the BlockTools component that I was unsure of. Apologies for not catching this sooner!

In the site editor, it looks like selecting multiple blocks at the same time and pressing backspace/delete doesn't current delete the selected blocks. I could replicate the same issue on trunk, so I don't think it's introduced by this PR, but I also wasn't quite sure why it wasn't working. Possibly due to the iframed editor?

There's another case that this fix doesn't appear to resolve, which is more of an edge case but would still be good to see if we can fix, and that's the template editor. With this PR applied, I did the following:

  1. Open up a post in the post editor
  2. Under Template select edit
  3. Within the template, scroll down and select two paragraphs (assuming you already have two paragraphs in the template, otherwise add them in)
  4. Go to change the color in the sidebar, and pressing backspace in the input field removes the selected paragraphs:
Kapture.2021-12-16.at.12.38.30.mp4

I wonder if that's another iframe related issue?

@ramonjd
Copy link
Member Author

ramonjd commented Dec 16, 2021

Thanks for catching this behaviour. I think you're right: the iframe doesn't know about any active elements outside of its context.

The container passed to <BlockTools /> therefore thinks it has the active element in the selected blocks.

This is making me think I'll need to retreat back to the original idea of adding event.stopPropagation() to the onKeyDown events of inspector text input controls.

At least until we work out a better way. It's not a fantastic experience the way it is.

The might be a neat way of adding sugar to them all.

…o that the event does not bubble up to the parents in the block editor.
@ramonjd
Copy link
Member Author

ramonjd commented Dec 16, 2021

@andrewserong It turns out I was misinterpreting the Slot Fill docs.

If bubblesVirtually is set to true, events will bubble to their virtual parent in the React elements hierarchy instead.

In 84a3c7c I've removed the active element check and instead am passing down bubblesVirtually=false explicitly from the InspectorControls slot in BlockInspector.

It fixes most things we've discovered, but there might be side effects. I'll keep testing. 😄

@andrewserong
Copy link
Contributor

Thanks for pressing on with it @ramonjd! This is working nicely for me in the post editor and template editor now using the bubblesVirtually={ false } setting, and while in the color input field, I can still use CMD+S to save the post.

One thing for us to consider is that in #37024 the ability to pass down bubblesVirtually was removed. @gziolo and @youknowriad, it looks like in #37024, it was removed possibly because there were no longer any use cases for it? Though I do see a comment there that in future we want the setting to be true everywhere. Does this seem like a valid use case for preserving the prop (and the ability to set it to false), or is there an alternate preferred way to go about suppressing the multi-selection block removal in the block inspector?

@youknowriad
Copy link
Contributor

I'd like to add @ellatrix to this PR as If I remember properly, she worked on very similar goals in the past.

@@ -66,7 +66,7 @@ const BlockInspector = ( { showNoBlockSelectedMessage = true } ) => {
return (
<div className="block-editor-block-inspector">
<MultiSelectionInspector />
<InspectorControls.Slot />
<InspectorControls.Slot bubblesVirtually={ false } />
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure this is the right fix, If I remember properly, this breaks context propagation in the fills. For instance if there's a context being provided around the slot like we do sometimes for BlockEditContextProvider, the inspector controls won't receive these values anymore. I remember in the past the impossibility to use RichText inside of Inspector controls because of this.

For these reasons, we've preferred moving all slots to bubblesVirtually, The other implementation might be here just for native usage (where portals are not supported)

Copy link
Member Author

Choose a reason for hiding this comment

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

I'm not sure this is the right fix, If I remember properly, this breaks context propagation in the fills.

Yeah, it was more of a 🤞 so thanks for the warning.

The fallback, if we can't come up with a neater way, would be to try to stop propagation on key events for these particular text controls. Maybe even targeting del and backspace specifically. 🤷

Copy link
Member Author

Choose a reason for hiding this comment

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

be to try to stop propagation on key events for these particular text controls. Maybe even targeting del and backspace specifically

What the heck. 😄

#37472

It's more low level, but might be a backup approach if we can't target the events at a higher level.

@andrewserong
Copy link
Contributor

With the fix proposed in #37595, it looks like we should be able to close out this PR.

@andrewserong
Copy link
Contributor

Closing in favour of #37595 (thanks for digging into this one, Ramon!)

@youknowriad youknowriad deleted the try/prevent-block-editor-key-down-events-when-not-focussed branch December 27, 2021 09:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Block editor /packages/block-editor [Package] Keyboard Shortcuts /packages/keyboard-shortcuts [Status] In Progress Tracking issues with work in progress
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Shortcuts: Delete multi selection shortcut triggered when clearing sidebar controls
3 participants