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;