X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenuframe.c;h=a95e46fca4e1ccc9bd300037feb7ffed9ad6c196;hb=03f861b0ac70450359656ad16c754e9e394d6c49;hp=25131435644ec5ccccb19cc0a652aed74330e8f3;hpb=26879183e96f5a0d981e6ae76fda82a0d4564b20;p=chaz%2Fopenbox diff --git a/openbox/menuframe.c b/openbox/menuframe.c index 25131435..a95e46fc 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -221,15 +221,18 @@ static void menu_frame_place_topmenu(ObMenuFrame *self, gint *x, gint *y) /* try to the right of the cursor */ menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + self->direction_right = TRUE; if (dx != 0) { /* try to the left of the cursor */ myx = *x - self->area.width; menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + self->direction_right = FALSE; } if (dx != 0) { /* if didnt fit on either side so just use what it says */ myx = *x; menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + self->direction_right = TRUE; } *x = myx + dx; *y += dy; @@ -240,30 +243,35 @@ static void menu_frame_place_topmenu(ObMenuFrame *self, gint *x, gint *y) myy = *y; /* try to the bottom right of the cursor */ - menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + menu_frame_move_on_screen(self, myx, myy, &dx, &dy); + self->direction_right = TRUE; if (dx != 0 || dy != 0) { /* try to the bottom left of the cursor */ myx = *x - self->area.width; myy = *y; - menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + menu_frame_move_on_screen(self, myx, myy, &dx, &dy); + self->direction_right = FALSE; } if (dx != 0 || dy != 0) { /* try to the top right of the cursor */ myx = *x; myy = *y - self->area.height; - menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + menu_frame_move_on_screen(self, myx, myy, &dx, &dy); + self->direction_right = TRUE; } if (dx != 0 || dy != 0) { /* try to the top left of the cursor */ myx = *x - self->area.width; myy = *y - self->area.height; - menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + menu_frame_move_on_screen(self, myx, myy, &dx, &dy); + self->direction_right = FALSE; } if (dx != 0 || dy != 0) { /* if didnt fit on either side so just use what it says */ myx = *x; myy = *y; - menu_frame_move_on_screen(self, myx, *y, &dx, &dy); + menu_frame_move_on_screen(self, myx, myy, &dx, &dy); + self->direction_right = TRUE; } *x = myx + dx; *y = myy + dy; @@ -561,7 +569,7 @@ static void menu_frame_render(ObMenuFrame *self) gint l, t, r, b; e->a_text_normal->texture[0].data.text.string = ""; - RrMinsize(e->a_text_normal, &tw, &th); + RrMinSize(e->a_text_normal, &tw, &th); tw += 2*PADDING; th += 2*PADDING; self->item_h = th; @@ -623,7 +631,7 @@ static void menu_frame_render(ObMenuFrame *self) switch (e->entry->type) { case OB_MENU_ENTRY_TYPE_NORMAL: text_a->texture[0].data.text.string = e->entry->data.normal.label; - RrMinsize(text_a, &tw, &th); + RrMinSize(text_a, &tw, &th); tw = MIN(tw, MAX_MENU_WIDTH); if (e->entry->data.normal.icon_data || @@ -633,7 +641,7 @@ static void menu_frame_render(ObMenuFrame *self) case OB_MENU_ENTRY_TYPE_SUBMENU: sub = e->entry->data.submenu.submenu; text_a->texture[0].data.text.string = sub ? sub->title : ""; - RrMinsize(text_a, &tw, &th); + RrMinSize(text_a, &tw, &th); tw = MIN(tw, MAX_MENU_WIDTH); if (e->entry->data.normal.icon_data || @@ -646,7 +654,7 @@ static void menu_frame_render(ObMenuFrame *self) if (e->entry->data.separator.label != NULL) { e->a_text_title->texture[0].data.text.string = e->entry->data.separator.label; - RrMinsize(e->a_text_title, &tw, &th); + RrMinSize(e->a_text_title, &tw, &th); tw = MIN(tw, MAX_MENU_WIDTH); th = ob_rr_theme->menu_title_height + (ob_rr_theme->mbwidth - PADDING) *2; @@ -743,16 +751,6 @@ static gboolean menu_frame_show(ObMenuFrame *self) { GList *it; - if (menu_frame_visible == NULL) { - /* no menus shown yet */ - if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER)) - return FALSE; - if (!grab_keyboard(TRUE)) { - grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER); - return FALSE; - } - } - /* determine if the underlying menu is already visible */ for (it = menu_frame_visible; it; it = g_list_next(it)) { ObMenuFrame *f = it->data; @@ -761,7 +759,18 @@ static gboolean menu_frame_show(ObMenuFrame *self) } if (!it) { if (self->menu->update_func) - self->menu->update_func(self, self->menu->data); + if (!self->menu->update_func(self, self->menu->data)) + return FALSE; + } + + if (menu_frame_visible == NULL) { + /* no menus shown yet */ + if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER)) + return FALSE; + if (!grab_keyboard(TRUE)) { + grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER); + return FALSE; + } } menu_frame_update(self);