Skip to main content
Karsten.G
Known Participant
July 9, 2026

P: Keyboard input routing of floating dialogs depends on prior SDK calls

  • July 9, 2026
  • 12 replies
  • 189 views

Environment

  • Adobe Lightroom Classic 15.4
  • Lightroom SDK
  • Windows 11
  • Standalone reproducer plugin attached

Summary

A floating dialog opened via presentFloatingDialog() does not consistently receive keyboard input.

The same floating dialog implementation exhibits two different behaviors depending on the SDK calls executed immediately before the dialog is created.

In one case, keyboard input is routed to the floating dialog immediately after opening.

In the other case, keyboard input remains with Lightroom, allowing Lightroom keyboard shortcuts to continue working while the floating dialog is visible.

A complete standalone reproducer plugin is attached.
 

Steps to Reproduce

  1. Install the attached reproducer plugin via File > Plug-in Manager > Add.
  2. Run via File > Plug-in Extras > Floating Dialog Keyboard Input Reproduction.
  3. Choose one of the two test configurations:
    • Plugin dialog receives keyboard input
    • Lightroom receives keyboard input
  4. Press the Tab key.

A complete standalone reproducer plugin is attached.
 

Expected Result

The keyboard input behavior of a floating dialog should be deterministic.

Ideally, plugin authors should be able to specify whether a floating dialog receives keyboard input after opening or whether keyboard input remains with Lightroom.
 

Actual Result

The keyboard input behavior depends on the SDK calls executed immediately before presentFloatingDialog().

Using the attached reproducer:

  • In one configuration, the floating dialog receives keyboard input. Pressing Tab cycles between the dialog buttons.
  • In the other configuration, Lightroom receives keyboard input. Pressing Tab toggles Lightroom's side panels instead.

The floating dialog implementation itself is identical in both cases.
 

Additional Information

The reproducer demonstrates that keyboard input behavior can be influenced by executing the following sequence immediately before calling presentFloatingDialog():

  • create a short-lived LrFunctionContext
  • show a modal progress dialog
  • execute catalog:getPublishServices()
  • yield repeatedly while the progress dialog remains open
  • close the progress dialog
  • call presentFloatingDialog()

The exact purpose of this sequence is unknown. It merely demonstrates that keyboard input routing depends on prior SDK activity.

On macOS, the same reproducer exhibits no observable difference between the two configurations.
 

Impact

Plugins using floating dialogs cannot reliably control whether keyboard input should be captured by the dialog or remain with Lightroom.

Both behaviors are useful in different workflows.

For example:

  • A dialog intended for keyboard interaction should receive keyboard input immediately after opening.
  • A monitoring dialog that automatically updates in response to Lightroom events may intentionally leave keyboard input with Lightroom so that normal Lightroom shortcuts continue to work.

The current SDK provides no documented mechanism for selecting the desired behavior.
 

Enhancement Request

Consider extending LrDialogs.presentFloatingDialog() with an optional parameter allowing plugin authors to specify the desired keyboard input behavior after opening, for example:

  • Floating dialog receives keyboard input.
  • Lightroom retains keyboard input.

This would provide a documented and deterministic mechanism instead of relying on implementation-dependent behavior.

Attachments

Standalone reproducer plugin FloatingDialogKeyboardInput.lrplugin

Link to a screen recording displaying the described behavior:

https://www.dropbox.com/scl/fi/ytcz96vucntp4biz4s5d9/FloatingDialogKeyboardInput.mp4?rlkey=apwt8cpxfnd6pragd9alaz8ko&dl=0

    12 replies

    C.Cella
    Legend
    July 26, 2026

    What I would expect to have is:

    • The floating dialogs still sticks in foreground when the user clicks on the main app UI (on Mac Os floating dialogs stay in foreground if in full screen, otherwise it disappears)

    An old bug/issue never fixed.

    •Keyboard input is received based on whether the LrC UI has focus or the dialog.

    If floating dialog has focus it receives keyboard input.

    If Ui has focus it receives keyboards input.

    User only needs to click to assign focus.

     

    This is the behaviour of the Masking panel. 

    E.g.

    When masking is open or floating the Delete key affects the mask/correction selected and does not remove/delte the photo (fwiw sometimes this is bugged and masking panel looses focus, restarting the app is required )

     

    The root problem is that SDK floating Dialogs have never been aligned to LrC native floating dialogs or equivalents.

    .

    Karsten.G
    Karsten.GAuthor
    Known Participant
    July 26, 2026

    First of all, thank you for upvoting the bug report!

    There seem to be different views and expectations regarding the behavior of a floating dialog when clicking on the main app. See the discussion at P: SDK: Floating dialogs always in back, never in front, in Screen Mode > Full Screen on Windows | Community.
     

    “Keyboard input is received based on whether the LrC UI has focus or the dialog”

    Once the floating dialog is open, it behaves as you said (at least on Windows).

    My request concerns the behavior that occurs immediately after the floating dialog has been opened. Typically, the dialog is the active window and receives keyboard input, but it is possible to create a situation where this does not happen. Ideally, the caller should explicitly define the desired behavior so that different types of applications can be specified. E.g. an interactive dialog vs. one which is “following” (monitoring) what happens in Lightroom, even if this involves a refresh (close & reopen) of the dialog, like my Focus Points plugin does:

     

     

    C.Cella
    Legend
    July 26, 2026

    So you would want for instance to have the LrC UI in focus but then keyboard input would NOT affect LrC UI but affect the open Floating dialog.

    And vice versa have the Floating in focus BUT keyboard input would affect LrC UI.


    Now what kind of keyboard input you expect to use, only Tab?
    If there are ways to observe keyboard input via SDK I dont know them, I only know we can observe certain keys (undocumented) but the API is bugged on Windows.


    P.s.

    I thought at a workaround for the moment which is to have “proxyCodes” that signal the Floating UI to change.
    Workflow wise users could assign KSBC to these proxyCodes via Mac Os or AutoKey.


    Check the idea in action in this video link before it expires: https://we.tl/t-azpS4WyEkhBs7Aga

    Even when Floating Dialog has no focus even if I am working in Masking the proxyCodes act on the floating dialog

    But the main issue remains: the floating dialogs falls in background so I had to be in full screen on Mac to make it work.

    Inspiring
    July 24, 2026

    Please fix this 

    johnrellis
    Legend
    July 9, 2026

    I helped Karsten track down this using the Publish Collections command of my  Any Source plugin.