diff options
author | Richard Hult <richard@imendio.com> | 2006-07-19 17:06:40 +0000 |
---|---|---|
committer | Richard Hult <rhult@src.gnome.org> | 2006-07-19 17:06:40 +0000 |
commit | d3973cb8653a9382e670ce4be560997b6f650ad7 (patch) | |
tree | 41dbc3747f917b3e69034a0c58fd4c375c8f3a5f /gdk/quartz | |
parent | e1d2805cc5b6aa1f4e0fedba12cf2635796d0ca8 (diff) | |
download | gtk+-d3973cb8653a9382e670ce4be560997b6f650ad7.tar.gz |
]): Listen to windowDidResignMain notifications and properly update the
2006-07-19 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c
([GdkQuartzWindow -windowDidResignMain:]):
* gdk/quartz/gdkevents-quartz.c (_gdk_quartz_update_focus_window):
Listen to windowDidResignMain notifications and properly update the
focus window when windows are unfocused.
Diffstat (limited to 'gdk/quartz')
-rw-r--r-- | gdk/quartz/GdkQuartzWindow.c | 9 | ||||
-rw-r--r-- | gdk/quartz/gdkevents-quartz.c | 60 | ||||
-rw-r--r-- | gdk/quartz/gdkprivate-quartz.h | 3 |
3 files changed, 47 insertions, 25 deletions
diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c index 1c03de0bf8..3fc35f83ea 100644 --- a/gdk/quartz/GdkQuartzWindow.c +++ b/gdk/quartz/GdkQuartzWindow.c @@ -59,7 +59,14 @@ { GdkWindow *window = [[self contentView] gdkWindow]; - _gdk_quartz_update_focus_window (window); + _gdk_quartz_update_focus_window (window, TRUE); +} + +-(void)windowDidResignMain:(NSNotification *)aNotification +{ + GdkWindow *window = [[self contentView] gdkWindow]; + + _gdk_quartz_update_focus_window (window, FALSE); } -(void)windowDidMove:(NSNotification *)aNotification diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c index 409264a230..9129ae01ab 100644 --- a/gdk/quartz/gdkevents-quartz.c +++ b/gdk/quartz/gdkevents-quartz.c @@ -748,24 +748,42 @@ create_focus_event (GdkWindow *window, return event; } +/* Note: Used to both set a new focus window and to unset the old one. */ void -_gdk_quartz_update_focus_window (GdkWindow *new_window) +_gdk_quartz_update_focus_window (GdkWindow *window, + gboolean got_focus) { + GdkEvent *event; + + if (got_focus && window == current_keyboard_window) + return; + /* FIXME: Don't do this when grabbed */ - if (new_window != current_keyboard_window) + if (!got_focus) { - GdkEvent *event; - - event = create_focus_event (current_keyboard_window, FALSE); - append_event (event); + if (window == current_keyboard_window) + { + event = create_focus_event (current_keyboard_window, FALSE); + append_event (event); + g_object_unref (current_keyboard_window); + current_keyboard_window = NULL; + } + } - event = create_focus_event (new_window, TRUE); + if (got_focus) + { + if (current_keyboard_window) + { + event = create_focus_event (current_keyboard_window, FALSE); + append_event (event); + g_object_unref (current_keyboard_window); + current_keyboard_window = NULL; + } + + event = create_focus_event (window, TRUE); append_event (event); - - g_object_unref (current_keyboard_window); - - current_keyboard_window = g_object_ref (new_window); + current_keyboard_window = g_object_ref (window); } } @@ -1466,7 +1484,6 @@ gdk_event_translate (NSEvent *nsevent) case NSRightMouseUp: case NSOtherMouseUp: event = create_button_event (window, nsevent, x, y); - append_event (event); /* Ungrab implicit grab */ @@ -1550,17 +1567,14 @@ gdk_event_translate (NSEvent *nsevent) void _gdk_events_queue (GdkDisplay *display) { - if (current_event) - { - - if (!gdk_event_translate (current_event)) - { - [NSApp sendEvent:current_event]; - } - - [current_event release]; - current_event = NULL; - } + if (current_event) + { + if (!gdk_event_translate (current_event)) + [NSApp sendEvent:current_event]; + + [current_event release]; + current_event = NULL; + } } void diff --git a/gdk/quartz/gdkprivate-quartz.h b/gdk/quartz/gdkprivate-quartz.h index 101fe80fed..bbd1f72f85 100644 --- a/gdk/quartz/gdkprivate-quartz.h +++ b/gdk/quartz/gdkprivate-quartz.h @@ -103,7 +103,8 @@ void _gdk_quartz_set_context_stroke_color_from_pixel (CGContextRef context, GdkC void _gdk_quartz_update_context_from_gc (CGContextRef context, GdkGC *gc); -void _gdk_quartz_update_focus_window (GdkWindow *new_window); +void _gdk_quartz_update_focus_window (GdkWindow *new_window, + gboolean got_focus); gint _gdk_quartz_get_inverted_screen_y (gint y); |