Mercurial > emacs
comparison src/gtkutil.c @ 109452:a93344738bc8
Merge latest fix to xg_event_is_for_menubar.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 17 Jul 2010 10:41:10 -0400 |
parents | 051595eb9b58 507549811e3e |
children | 514fed5c0ded |
comparison
equal
deleted
inserted
replaced
109451:d40dce517523 | 109452:a93344738bc8 |
---|---|
2858 | 2858 |
2859 int | 2859 int |
2860 xg_event_is_for_menubar (FRAME_PTR f, XEvent *event) | 2860 xg_event_is_for_menubar (FRAME_PTR f, XEvent *event) |
2861 { | 2861 { |
2862 struct x_output *x = f->output_data.x; | 2862 struct x_output *x = f->output_data.x; |
2863 GList *iter; | |
2864 GdkRectangle rec; | |
2865 GList *list; | |
2866 GdkDisplay *gdpy; | |
2867 GdkWindow *gw; | |
2868 GdkEvent gevent; | |
2869 GtkWidget *gwdesc; | |
2863 | 2870 |
2864 if (! x->menubar_widget) return 0; | 2871 if (! x->menubar_widget) return 0; |
2865 | 2872 |
2866 if (! (event->xbutton.x >= 0 | 2873 if (! (event->xbutton.x >= 0 |
2867 && event->xbutton.x < FRAME_PIXEL_WIDTH (f) | 2874 && event->xbutton.x < FRAME_PIXEL_WIDTH (f) |
2868 && event->xbutton.y >= 0 | 2875 && event->xbutton.y >= 0 |
2869 && event->xbutton.y < f->output_data.x->menubar_height | 2876 && event->xbutton.y < f->output_data.x->menubar_height |
2870 && event->xbutton.same_screen)) | 2877 && event->xbutton.same_screen)) |
2871 return 0; | 2878 return 0; |
2872 | 2879 |
2873 GList *list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget)); | 2880 gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f)); |
2881 gw = gdk_xid_table_lookup_for_display (gdpy, event->xbutton.window); | |
2882 if (! gw) return 0; | |
2883 gevent.any.window = gw; | |
2884 gwdesc = gtk_get_event_widget (&gevent); | |
2885 if (! gwdesc) return 0; | |
2886 if (! GTK_IS_MENU_BAR (gwdesc) | |
2887 && ! GTK_IS_MENU_ITEM (gwdesc) | |
2888 && ! gtk_widget_is_ancestor (x->menubar_widget, gwdesc)) | |
2889 return 0; | |
2890 | |
2891 list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget)); | |
2874 if (! list) return 0; | 2892 if (! list) return 0; |
2875 GList *iter; | |
2876 GdkRectangle rec; | |
2877 rec.x = event->xbutton.x; | 2893 rec.x = event->xbutton.x; |
2878 rec.y = event->xbutton.y; | 2894 rec.y = event->xbutton.y; |
2879 rec.width = 1; | 2895 rec.width = 1; |
2880 rec.height = 1; | 2896 rec.height = 1; |
2897 | |
2881 for (iter = list ; iter; iter = g_list_next (iter)) | 2898 for (iter = list ; iter; iter = g_list_next (iter)) |
2882 { | 2899 { |
2883 GtkWidget *w = GTK_WIDGET (iter->data); | 2900 GtkWidget *w = GTK_WIDGET (iter->data); |
2884 if (GTK_WIDGET_MAPPED (w) && gtk_widget_intersect (w, &rec, NULL)) | 2901 if (GTK_WIDGET_MAPPED (w) && gtk_widget_intersect (w, &rec, NULL)) |
2885 break; | 2902 break; |