[gtk+/gtk-2-22] win32: Resurrect some enter/leave notify events for native windows
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-22] win32: Resurrect some enter/leave notify events for native windows
- Date: Fri, 27 Aug 2010 20:20:07 +0000 (UTC)
commit e339d36a02180bbbb555055c1676b41da8c58972
Author: Hans Breuer <hans breuer org>
Date: Fri Aug 27 21:29:33 2010 +0200
win32: Resurrect some enter/leave notify events for native windows
The button highlighting in testgtk works again, even with
GDK_NATIVE_WINDOWS. Unfortunately testgtk:menus still does
not work for the forced-native-window-case.
gdk/win32/gdkevents-win32.c | 37 +++++++++++++++++++++++++------------
1 files changed, 25 insertions(+), 12 deletions(-)
---
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 1707a8d..6e6a026 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -132,6 +132,13 @@ static UINT sync_timer = 0;
static int debug_indent = 0;
static void
+synthesize_enter_or_leave_event (GdkWindow *window,
+ MSG *msg,
+ GdkEventType type,
+ GdkCrossingMode mode,
+ GdkNotifyType detail);
+
+static void
assign_object (gpointer lhsp,
gpointer rhs)
{
@@ -1728,6 +1735,9 @@ generate_button_event (GdkEventType type,
event->button.device = _gdk_display->core_pointer;
append_event (event);
+
+ if (type == GDK_BUTTON_PRESS)
+ _gdk_event_button_generate (_gdk_display, event);
}
static void
@@ -2372,14 +2382,6 @@ gdk_event_translate (MSG *msg,
GDK_NOTE (EVENTS,
g_print (" (%d,%d)",
GET_X_LPARAM (msg->lParam), GET_Y_LPARAM (msg->lParam)));
-#if 0 /* TODO_CSW? */
- if (current_toplevel != NULL &&
- (((GdkWindowObject *) current_toplevel)->event_mask & GDK_LEAVE_NOTIFY_MASK))
- {
- synthesize_enter_or_leave_event (current_toplevel, msg,
- GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
- }
-#endif
break;
case WM_MOUSELEAVE:
@@ -2390,15 +2392,18 @@ gdk_event_translate (MSG *msg,
{
/* we are only interested if we don't know the new window */
if (current_toplevel)
- synthesize_enter_or_leave_event (current_toplevel, msg,
+ synthesize_enter_or_leave_event (current_toplevel, msg,
GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
assign_object (¤t_toplevel, NULL);
}
- else
+ else if (window != gdk_window_get_toplevel (window)) /* xxx: only for native child windows? */
{
- GDK_NOTE (EVENTS, g_print (" (ignored)"));
+ /* XXX: this used to be ignored pre-csw, but I think we need at least some
+ * of the leave events */
+ synthesize_enter_or_leave_event (window, msg,
+ GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
}
-
+
return_val = TRUE;
break;
@@ -2588,6 +2593,14 @@ gdk_event_translate (MSG *msg,
{
grab_window = grab->window;
}
+ else if (window != gdk_window_get_toplevel (window)) /* xxx: only for native child windows? */
+ {
+ /* when entering a new window we are Windows is always asking for a new cursor
+ * so this might be a good spot to emmulate enter-notify events */
+ synthesize_enter_or_leave_event (window, msg,
+ GDK_ENTER_NOTIFY, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR);
+ track_mouse_event (TME_LEAVE, GDK_WINDOW_HWND (window));
+ }
if (grab_window == NULL && LOWORD (msg->lParam) != HTCLIENT)
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]