diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2022-03-02 00:09:28 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2022-03-02 00:25:12 +0300 |
commit | 9bd586a01e6813a615eab05871803730603e2152 (patch) | |
tree | a437902dcc606b7ea3b13d6d7e7ba1168a6428bd /intern/ghost/GHOST_C-api.h | |
parent | 8e88af99348590e9879dcbfe97bbbc180fc5ec67 (diff) |
Fix T95608: Mac issues with drag drop on multi-monitor
Mousemove events are sent to windows.
In Windows OS, almost all mousemove events are sent to the window whose
mouse cursor is over.
On MacOS, the window with mousemove events is always the active window.
It doesn't matter if the mouse cursor is inside or outside the window.
So, in order for non-active windows to also have events,
`WM_window_find_under_cursor` is called to find those windows and send
the same events.
The problem is that to find the window, `WM_window_find_under_cursor`
only has the mouse coordinates available, it doesn't differentiate
which monitor these coordinates came from.
So the mouse on one monitor may incorrectly send events to a window on
another monitor.
The solution used is to use a native API on Mac to detect the window
under the cursor.
For Windows and Linux nothing has changed.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D14197
Diffstat (limited to 'intern/ghost/GHOST_C-api.h')
-rw-r--r-- | intern/ghost/GHOST_C-api.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h index 98094cc0669..a2eef91c704 100644 --- a/intern/ghost/GHOST_C-api.h +++ b/intern/ghost/GHOST_C-api.h @@ -265,6 +265,16 @@ extern GHOST_TSuccess GHOST_EndFullScreen(GHOST_SystemHandle systemhandle); */ extern int GHOST_GetFullScreen(GHOST_SystemHandle systemhandle); +/** + * Get the Window under the cursor. + * \param x: The x-coordinate of the cursor. + * \param y: The y-coordinate of the cursor. + * @return The window under the cursor or nullptr in none. + */ +extern GHOST_WindowHandle GHOST_GetWindowUnderCursor(GHOST_SystemHandle systemhandle, + int32_t x, + int32_t y); + /*************************************************************************************** * Event management functionality ***************************************************************************************/ |