forked from bartvdbraak/blender
Cocoa : use Cocoa NSWindow tag for identifying the window where a mouse/tablet/key event happened => enables some actions in inactive windows as per OSX standard
Previous code was assuming an event can only be sent from the active window. On OSX, Right, Middle mouse buttons, mouse wheel and trackpad events are sent to inactive windows too. For example, this allows to zoom, pan the view without changing the window order.
This commit is contained in:
parent
bed4c49a79
commit
586acf21a7
@ -1322,17 +1322,13 @@ bool GHOST_SystemCocoa::handleOpenDocumentRequest(void *filepathStr)
|
||||
GHOST_TSuccess GHOST_SystemCocoa::handleTabletEvent(void *eventPtr, short eventType)
|
||||
{
|
||||
NSEvent *event = (NSEvent *)eventPtr;
|
||||
GHOST_IWindow* window = m_windowManager->getActiveWindow();
|
||||
GHOST_IWindow* window;
|
||||
|
||||
if (!window) {
|
||||
/* If no active window found, still tries to find the window associated with the event
|
||||
This may happen when Cocoa continues to send some events after the window deactivate one */
|
||||
window = m_windowManager->getWindowAssociatedWithOSWindow((void*)[event window]);
|
||||
if (!window) {
|
||||
//printf("\nW failure for event 0x%x",[event type]);
|
||||
return GHOST_kFailure;
|
||||
}
|
||||
}
|
||||
|
||||
GHOST_TabletData& ct=((GHOST_WindowCocoa*)window)->GetCocoaTabletData();
|
||||
|
||||
@ -1381,17 +1377,13 @@ GHOST_TSuccess GHOST_SystemCocoa::handleTabletEvent(void *eventPtr, short eventT
|
||||
GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr)
|
||||
{
|
||||
NSEvent *event = (NSEvent *)eventPtr;
|
||||
GHOST_Window* window = (GHOST_Window*)m_windowManager->getActiveWindow();
|
||||
GHOST_Window* window;
|
||||
|
||||
if (!window) {
|
||||
/* If no active window found, still tries to find the window associated with the event
|
||||
This may happen when Cocoa continues to send some events after the window deactivate one */
|
||||
window = (GHOST_Window*)m_windowManager->getWindowAssociatedWithOSWindow((void*)[event window]);
|
||||
if (!window) {
|
||||
//printf("\nW failure for event 0x%x",[event type]);
|
||||
return GHOST_kFailure;
|
||||
}
|
||||
}
|
||||
|
||||
switch ([event type])
|
||||
{
|
||||
@ -1586,7 +1578,7 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr)
|
||||
GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
|
||||
{
|
||||
NSEvent *event = (NSEvent *)eventPtr;
|
||||
GHOST_IWindow* window = m_windowManager->getActiveWindow();
|
||||
GHOST_IWindow* window;
|
||||
unsigned int modifiers;
|
||||
NSString *characters;
|
||||
NSData *convertedCharacters;
|
||||
@ -1594,15 +1586,11 @@ GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
|
||||
unsigned char ascii;
|
||||
NSString* charsIgnoringModifiers;
|
||||
|
||||
if (!window) {
|
||||
/* If no active window found, still tries to find the window associated with the event
|
||||
This may happen when Cocoa continues to send some events after the window deactivate one */
|
||||
window = m_windowManager->getWindowAssociatedWithOSWindow((void*)[event window]);
|
||||
if (!window) {
|
||||
//printf("\nW failure for event 0x%x",[event type]);
|
||||
return GHOST_kFailure;
|
||||
}
|
||||
}
|
||||
|
||||
switch ([event type]) {
|
||||
case NSKeyDown:
|
||||
|
@ -2090,7 +2090,6 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
||||
break;
|
||||
}
|
||||
case GHOST_kEventTrackpad: {
|
||||
if (win->active) {
|
||||
GHOST_TEventTrackpadData * pd = customdata;
|
||||
switch (pd->subtype) {
|
||||
case GHOST_kTrackpadEventMagnify:
|
||||
@ -2122,7 +2121,6 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
||||
|
||||
update_tablet_data(win, &event);
|
||||
wm_event_add(win, &event);
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* mouse button */
|
||||
|
Loading…
Reference in New Issue
Block a user