Mercurial > emacs
comparison src/gtkutil.c @ 109332:507549811e3e
* gtkutil.c (xg_event_is_for_menubar): Also check that event window
is related to the menu bar (Bug#6499).
author | Jan D <jan.h.d@swipnet.se> |
---|---|
date | Sat, 17 Jul 2010 11:59:19 +0200 |
parents | 60266cf487b0 |
children | a93344738bc8 1cdff3b101d6 |
comparison
equal
deleted
inserted
replaced
109331:0c54c271bb98 | 109332:507549811e3e |
---|---|
2992 | 2992 |
2993 int | 2993 int |
2994 xg_event_is_for_menubar (FRAME_PTR f, XEvent *event) | 2994 xg_event_is_for_menubar (FRAME_PTR f, XEvent *event) |
2995 { | 2995 { |
2996 struct x_output *x = f->output_data.x; | 2996 struct x_output *x = f->output_data.x; |
2997 GList *iter; | |
2998 GdkRectangle rec; | |
2999 GList *list; | |
3000 GdkDisplay *gdpy; | |
3001 GdkWindow *gw; | |
3002 GdkEvent gevent; | |
3003 GtkWidget *gwdesc; | |
2997 | 3004 |
2998 if (! x->menubar_widget) return 0; | 3005 if (! x->menubar_widget) return 0; |
2999 | 3006 |
3000 if (! (event->xbutton.x >= 0 | 3007 if (! (event->xbutton.x >= 0 |
3001 && event->xbutton.x < FRAME_PIXEL_WIDTH (f) | 3008 && event->xbutton.x < FRAME_PIXEL_WIDTH (f) |
3002 && event->xbutton.y >= 0 | 3009 && event->xbutton.y >= 0 |
3003 && event->xbutton.y < f->output_data.x->menubar_height | 3010 && event->xbutton.y < f->output_data.x->menubar_height |
3004 && event->xbutton.same_screen)) | 3011 && event->xbutton.same_screen)) |
3005 return 0; | 3012 return 0; |
3006 | 3013 |
3007 GList *list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget)); | 3014 gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f)); |
3015 gw = gdk_xid_table_lookup_for_display (gdpy, event->xbutton.window); | |
3016 if (! gw) return 0; | |
3017 gevent.any.window = gw; | |
3018 gwdesc = gtk_get_event_widget (&gevent); | |
3019 if (! gwdesc) return 0; | |
3020 if (! GTK_IS_MENU_BAR (gwdesc) | |
3021 && ! GTK_IS_MENU_ITEM (gwdesc) | |
3022 && ! gtk_widget_is_ancestor (x->menubar_widget, gwdesc)) | |
3023 return 0; | |
3024 | |
3025 list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget)); | |
3008 if (! list) return 0; | 3026 if (! list) return 0; |
3009 GList *iter; | |
3010 GdkRectangle rec; | |
3011 rec.x = event->xbutton.x; | 3027 rec.x = event->xbutton.x; |
3012 rec.y = event->xbutton.y; | 3028 rec.y = event->xbutton.y; |
3013 rec.width = 1; | 3029 rec.width = 1; |
3014 rec.height = 1; | 3030 rec.height = 1; |
3031 | |
3015 for (iter = list ; iter; iter = g_list_next (iter)) | 3032 for (iter = list ; iter; iter = g_list_next (iter)) |
3016 { | 3033 { |
3017 GtkWidget *w = GTK_WIDGET (iter->data); | 3034 GtkWidget *w = GTK_WIDGET (iter->data); |
3018 if (GTK_WIDGET_MAPPED (w) && gtk_widget_intersect (w, &rec, NULL)) | 3035 if (GTK_WIDGET_MAPPED (w) && gtk_widget_intersect (w, &rec, NULL)) |
3019 break; | 3036 break; |