X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenuframe.c;h=c6dd02fa3d8ec5a9e9ac21bfdab645207bbd6cc4;hb=7a39cb3e8db767effc47508168b4b1dffb321224;hp=5782b7ac25e8a09890f6f4bd510d9cb5bee367a6;hpb=b63ad92cca9f14a1d86c00bd76b52c1626a29ee3;p=chaz%2Fopenbox diff --git a/openbox/menuframe.c b/openbox/menuframe.c index 5782b7ac..c6dd02fa 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -911,6 +911,9 @@ static gboolean menu_frame_show(ObMenuFrame *self) if (menu_frame_visible == NULL) { /* no menus shown yet */ + + /* grab the pointer in such a way as to pass through "owner events" + so that we can get enter/leave notifies in the menu. */ if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER)) return FALSE; if (!grab_keyboard(TRUE)) { @@ -932,6 +935,7 @@ static gboolean menu_frame_show(ObMenuFrame *self) gboolean menu_frame_show_topmenu(ObMenuFrame *self, gint x, gint y, gint button) { + gint px, py; guint i; if (menu_frame_is_visible(self)) @@ -957,14 +961,20 @@ gboolean menu_frame_show_topmenu(ObMenuFrame *self, gint x, gint y, XMapWindow(ob_display, self->window); + if (screen_pointer_pos(&px, &py)) { + ObMenuEntryFrame *e = menu_entry_frame_under(px, py); + if (e && e->frame == self) + e->ignore_enters++; + } + return TRUE; } gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent, ObMenuEntryFrame *parent_entry) { - ObMenuEntryFrame *e; gint x, y, dx, dy; + gint px, py; if (menu_frame_is_visible(self)) return TRUE; @@ -994,9 +1004,11 @@ gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent, XMapWindow(ob_display, self->window); - if (screen_pointer_pos(&dx, &dy) && (e = menu_entry_frame_under(dx, dy)) && - e->frame == self) - ++e->ignore_enters; + if (screen_pointer_pos(&px, &py)) { + ObMenuEntryFrame *e = menu_entry_frame_under(px, py); + if (e && e->frame == self) + e->ignore_enters++; + } return TRUE; } @@ -1086,7 +1098,7 @@ ObMenuEntryFrame* menu_entry_frame_under(gint x, gint y) ObMenuEntryFrame *e = it->data; if (RECT_CONTAINS(e->area, x, y)) { - ret = e; + ret = e; break; } }