diff options
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/client_menu.c | 82 | ||||
| -rw-r--r-- | openbox/event.c | 6 | ||||
| -rw-r--r-- | openbox/menu.c | 6 | ||||
| -rw-r--r-- | openbox/menu.h | 3 | ||||
| -rw-r--r-- | openbox/menuframe.c | 74 | ||||
| -rw-r--r-- | openbox/menuframe.h | 6 |
6 files changed, 111 insertions, 66 deletions
diff --git a/openbox/client_menu.c b/openbox/client_menu.c index 011e3ec1..da6ac2d9 100644 --- a/openbox/client_menu.c +++ b/openbox/client_menu.c @@ -41,9 +41,8 @@ enum { CLIENT_SEND_TO, CLIENT_LAYER, CLIENT_ICONIFY, + CLIENT_RESTORE, CLIENT_MAXIMIZE, - CLIENT_RAISE, - CLIENT_LOWER, CLIENT_SHADE, CLIENT_DECORATE, CLIENT_MOVE, @@ -69,15 +68,15 @@ static gboolean client_update(ObMenuFrame *frame, gpointer data) e = menu_find_entry_id(menu, CLIENT_ICONIFY); e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_ICONIFY; + e = menu_find_entry_id(menu, CLIENT_RESTORE); + e->data.normal.enabled =frame->client->max_horz || frame->client->max_vert; + e = menu_find_entry_id(menu, CLIENT_MAXIMIZE); - menu_entry_set_label(e, - (frame->client->max_vert || frame->client->max_horz ? - _("Restor&e") : _("Maximiz&e")), TRUE); - e->data.normal.enabled =frame->client->functions & OB_CLIENT_FUNC_MAXIMIZE; + e->data.normal.enabled = + (frame->client->functions & OB_CLIENT_FUNC_MAXIMIZE) && + !frame->client->max_horz && !frame->client->max_vert; e = menu_find_entry_id(menu, CLIENT_SHADE); - menu_entry_set_label(e, (frame->client->shaded ? - _("&Roll down") : _("&Roll up")), TRUE); e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_SHADE; e = menu_find_entry_id(menu, CLIENT_MOVE); @@ -153,6 +152,16 @@ static gboolean send_to_update(ObMenuFrame *frame, gpointer data) act->data.sendto.follow = FALSE; acts = g_slist_prepend(NULL, act); e = menu_add_normal(menu, desk, name, acts, FALSE); + if (desk == DESKTOP_ALL) { + e->data.normal.mask = ob_rr_theme->desk_mask; + e->data.normal.mask_normal_color = ob_rr_theme->menu_color; + e->data.normal.mask_selected_color = + ob_rr_theme->menu_selected_color; + e->data.normal.mask_disabled_color = + ob_rr_theme->menu_disabled_color; + e->data.normal.mask_disabled_selected_color = + ob_rr_theme->menu_disabled_selected_color; + } if (frame->client->desktop == desk) e->data.normal.enabled = FALSE; @@ -257,57 +266,66 @@ void client_menu_startup() menu_set_update_func(menu, client_update); menu_set_place_func(menu, client_menu_place); - menu_add_submenu(menu, CLIENT_SEND_TO, SEND_TO_MENU_NAME); + acts = g_slist_prepend(NULL, action_from_string + ("ToggleMaximizeFull", + OB_USER_ACTION_MENU_SELECTION)); + e = menu_add_normal(menu, CLIENT_RESTORE, _("R&estore"), acts, TRUE); + e->data.normal.mask = ob_rr_theme->max_toggled_mask; + e->data.normal.mask_normal_color = ob_rr_theme->menu_color; + e->data.normal.mask_selected_color = ob_rr_theme->menu_selected_color; + e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; + e->data.normal.mask_disabled_selected_color = + ob_rr_theme->menu_disabled_selected_color; - menu_add_submenu(menu, CLIENT_LAYER, LAYER_MENU_NAME); + acts = g_slist_prepend(NULL, action_from_string + ("Move", OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, CLIENT_MOVE, _("&Move"), acts, TRUE); + + acts = g_slist_prepend(NULL, action_from_string + ("Resize", OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, CLIENT_RESIZE, _("Resi&ze"), acts, TRUE); acts = g_slist_prepend(NULL, action_from_string ("Iconify", OB_USER_ACTION_MENU_SELECTION)); e = menu_add_normal(menu, CLIENT_ICONIFY, _("Ico&nify"), acts, TRUE); e->data.normal.mask = ob_rr_theme->iconify_mask; e->data.normal.mask_normal_color = ob_rr_theme->menu_color; - e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; e->data.normal.mask_selected_color = ob_rr_theme->menu_selected_color; + e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; + e->data.normal.mask_disabled_selected_color = + ob_rr_theme->menu_disabled_selected_color; acts = g_slist_prepend(NULL, action_from_string ("ToggleMaximizeFull", OB_USER_ACTION_MENU_SELECTION)); - e = menu_add_normal(menu, CLIENT_MAXIMIZE, _("Maximiz&e"), acts, TRUE); + e = menu_add_normal(menu, CLIENT_MAXIMIZE, _("Ma&ximize"), acts, TRUE); e->data.normal.mask = ob_rr_theme->max_mask; e->data.normal.mask_normal_color = ob_rr_theme->menu_color; - e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; e->data.normal.mask_selected_color = ob_rr_theme->menu_selected_color; - - acts = g_slist_prepend(NULL, action_from_string - ("Raise", OB_USER_ACTION_MENU_SELECTION)); - menu_add_normal(menu, CLIENT_RAISE, _("Raise to &top"), acts, TRUE); - - acts = g_slist_prepend(NULL, action_from_string - ("Lower", OB_USER_ACTION_MENU_SELECTION)); - menu_add_normal(menu, CLIENT_LOWER, _("Lower to &bottom"),acts, TRUE); + e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; + e->data.normal.mask_disabled_selected_color = + ob_rr_theme->menu_disabled_selected_color; acts = g_slist_prepend(NULL, action_from_string ("ToggleShade", OB_USER_ACTION_MENU_SELECTION)); - e = menu_add_normal(menu, CLIENT_SHADE, _("&Roll up"), acts, TRUE); + e = menu_add_normal(menu, CLIENT_SHADE, _("&Roll up/down"), acts, TRUE); e->data.normal.mask = ob_rr_theme->shade_mask; e->data.normal.mask_normal_color = ob_rr_theme->menu_color; - e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; e->data.normal.mask_selected_color = ob_rr_theme->menu_selected_color; + e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; + e->data.normal.mask_disabled_selected_color = + ob_rr_theme->menu_disabled_selected_color; acts = g_slist_prepend(NULL, action_from_string ("ToggleDecorations", OB_USER_ACTION_MENU_SELECTION)); - menu_add_normal(menu, CLIENT_DECORATE, _("&Decorate"), acts, TRUE); + menu_add_normal(menu, CLIENT_DECORATE, _("Un/&Decorate"), acts, TRUE); menu_add_separator(menu, -1, NULL); - acts = g_slist_prepend(NULL, action_from_string - ("Move", OB_USER_ACTION_MENU_SELECTION)); - menu_add_normal(menu, CLIENT_MOVE, _("&Move"), acts, TRUE); + menu_add_submenu(menu, CLIENT_SEND_TO, SEND_TO_MENU_NAME); - acts = g_slist_prepend(NULL, action_from_string - ("Resize", OB_USER_ACTION_MENU_SELECTION)); - menu_add_normal(menu, CLIENT_RESIZE, _("Resi&ze"), acts, TRUE); + menu_add_submenu(menu, CLIENT_LAYER, LAYER_MENU_NAME); menu_add_separator(menu, -1, NULL); @@ -316,6 +334,8 @@ void client_menu_startup() e = menu_add_normal(menu, CLIENT_CLOSE, _("&Close"), acts, TRUE); e->data.normal.mask = ob_rr_theme->close_mask; e->data.normal.mask_normal_color = ob_rr_theme->menu_color; - e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; e->data.normal.mask_selected_color = ob_rr_theme->menu_selected_color; + e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; + e->data.normal.mask_disabled_selected_color = + ob_rr_theme->menu_disabled_selected_color; } diff --git a/openbox/event.c b/openbox/event.c index 61aea441..25460a71 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -1288,8 +1288,7 @@ static gboolean event_handle_menu_keyboard(XEvent *ev) ObMenuEntryFrame *e = it->data; gunichar entrykey = 0; - if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - e->entry->data.normal.enabled) + if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) entrykey = e->entry->data.normal.shortcut; else if (e->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) entrykey = e->entry->data.submenu.submenu->shortcut; @@ -1309,7 +1308,8 @@ static gboolean event_handle_menu_keyboard(XEvent *ev) num_found == 1) { menu_frame_select(frame, found, TRUE); - usleep(50000); + usleep(50000); /* highlight the item for a short bit so the + user can see what happened */ menu_entry_frame_execute(found, state, ev->xkey.time); } else { menu_frame_select(frame, found, TRUE); diff --git a/openbox/menu.c b/openbox/menu.c index 9aed40aa..741e27c1 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -382,10 +382,10 @@ void menu_show(gchar *name, gint x, gint y, gint button, ObClient *client) if (!menu_frame_show_topmenu(frame, x, y, button)) menu_frame_free(frame); else if (frame->entries) { + /* select the first entry if it's not a submenu */ ObMenuEntryFrame *e = frame->entries->data; - if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - e->entry->data.normal.enabled) - menu_frame_select(frame, e, FALSE); + if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) + menu_frame_select(frame, e, FALSE); } } diff --git a/openbox/menu.h b/openbox/menu.h index b08f7c95..64cbbd6a 100644 --- a/openbox/menu.h +++ b/openbox/menu.h @@ -112,8 +112,9 @@ struct _ObNormalMenuEntry { /* Mask icon */ RrPixmapMask *mask; RrColor *mask_normal_color; - RrColor *mask_disabled_color; RrColor *mask_selected_color; + RrColor *mask_disabled_color; + RrColor *mask_disabled_selected_color; }; struct _ObSubmenuMenuEntry { diff --git a/openbox/menuframe.c b/openbox/menuframe.c index a95e46fc..f87c3c0b 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -140,8 +140,10 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, XMapWindow(ob_display, self->text); self->a_normal = RrAppearanceCopy(ob_rr_theme->a_menu_normal); - self->a_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_disabled); self->a_selected = RrAppearanceCopy(ob_rr_theme->a_menu_selected); + self->a_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_disabled); + self->a_disabled_selected = + RrAppearanceCopy(ob_rr_theme->a_menu_disabled_selected); if (entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR) { self->a_separator = RrAppearanceCopy(ob_rr_theme->a_clear_tex); @@ -159,10 +161,12 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, self->a_text_normal = RrAppearanceCopy(ob_rr_theme->a_menu_text_normal); - self->a_text_disabled = - RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled); self->a_text_selected = RrAppearanceCopy(ob_rr_theme->a_menu_text_selected); + self->a_text_disabled = + RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled); + self->a_text_disabled_selected = + RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled_selected); self->a_text_title = RrAppearanceCopy(ob_rr_theme->a_menu_text_title); @@ -186,15 +190,17 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self) } RrAppearanceFree(self->a_normal); - RrAppearanceFree(self->a_disabled); RrAppearanceFree(self->a_selected); + RrAppearanceFree(self->a_disabled); + RrAppearanceFree(self->a_disabled_selected); RrAppearanceFree(self->a_separator); RrAppearanceFree(self->a_icon); RrAppearanceFree(self->a_mask); RrAppearanceFree(self->a_text_normal); - RrAppearanceFree(self->a_text_disabled); RrAppearanceFree(self->a_text_selected); + RrAppearanceFree(self->a_text_disabled); + RrAppearanceFree(self->a_text_disabled_selected); RrAppearanceFree(self->a_text_title); RrAppearanceFree(self->a_bullet_normal); RrAppearanceFree(self->a_bullet_selected); @@ -338,12 +344,14 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self) switch (self->entry->type) { case OB_MENU_ENTRY_TYPE_NORMAL: case OB_MENU_ENTRY_TYPE_SUBMENU: - item_a = ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - !self->entry->data.normal.enabled) ? - self->a_disabled : + item_a = (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && + !self->entry->data.normal.enabled ? + /* disabled */ (self == self->frame->selected ? - self->a_selected : - self->a_normal)); + self->a_disabled_selected : self->a_disabled) : + /* enabled */ + (self == self->frame->selected ? + self->a_selected : self->a_normal)); th = self->frame->item_h; break; case OB_MENU_ENTRY_TYPE_SEPARATOR: @@ -368,11 +376,14 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self) switch (self->entry->type) { case OB_MENU_ENTRY_TYPE_NORMAL: - text_a = (!self->entry->data.normal.enabled ? - self->a_text_disabled : + text_a = (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && + !self->entry->data.normal.enabled ? + /* disabled */ + (self == self->frame->selected ? + self->a_text_disabled_selected : self->a_text_disabled) : + /* enabled */ (self == self->frame->selected ? - self->a_text_selected : - self->a_text_normal)); + self->a_text_selected : self->a_text_normal)); text_a->texture[0].data.text.string = self->entry->data.normal.label; if (self->entry->data.normal.shortcut && (self->frame->menu->show_all_shortcuts || @@ -502,9 +513,13 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self) self->a_mask->texture[0].data.mask.mask = self->entry->data.normal.mask; - c = ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - !self->entry->data.normal.enabled) ? - self->entry->data.normal.mask_disabled_color : + c = (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && + !self->entry->data.normal.enabled ? + /* disabled */ + (self == self->frame->selected ? + self->entry->data.normal.mask_disabled_selected_color : + self->entry->data.normal.mask_disabled_color) : + /* enabled */ (self == self->frame->selected ? self->entry->data.normal.mask_selected_color : self->entry->data.normal.mask_normal_color)); @@ -592,6 +607,12 @@ static void menu_frame_render(ObMenuFrame *self) MAX(self->item_margin.top, t), MAX(self->item_margin.right, r), MAX(self->item_margin.bottom, b)); + RrMargins(e->a_disabled_selected, &l, &t, &r, &b); + STRUT_SET(self->item_margin, + MAX(self->item_margin.left, l), + MAX(self->item_margin.top, t), + MAX(self->item_margin.right, r), + MAX(self->item_margin.bottom, b)); } else self->item_h = 0; @@ -622,12 +643,15 @@ static void menu_frame_render(ObMenuFrame *self) XSetWindowBorder(ob_display, e->window, RrColorPixel(ob_rr_theme->menu_b_color)); - text_a = ((e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - !e->entry->data.normal.enabled) ? - e->a_text_disabled : + + text_a = (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && + !e->entry->data.normal.enabled ? + /* disabled */ + (e == self->selected ? + e->a_text_disabled_selected : e->a_text_disabled) : + /* enabled */ (e == self->selected ? - e->a_text_selected : - e->a_text_normal)); + e->a_text_selected : e->a_text_normal)); switch (e->entry->type) { case OB_MENU_ENTRY_TYPE_NORMAL: text_a->texture[0].data.text.string = e->entry->data.normal.label; @@ -1045,8 +1069,7 @@ void menu_frame_select_previous(ObMenuFrame *self) e = it->data; if (e->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) break; - if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - e->entry->data.normal.enabled) + if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) break; } } @@ -1071,8 +1094,7 @@ void menu_frame_select_next(ObMenuFrame *self) e = it->data; if (e->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) break; - if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - e->entry->data.normal.enabled) + if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) break; } } diff --git a/openbox/menuframe.h b/openbox/menuframe.h index 5c876832..15bae667 100644 --- a/openbox/menuframe.h +++ b/openbox/menuframe.h @@ -88,8 +88,9 @@ struct _ObMenuEntryFrame Window bullet; RrAppearance *a_normal; - RrAppearance *a_disabled; RrAppearance *a_selected; + RrAppearance *a_disabled; + RrAppearance *a_disabled_selected; RrAppearance *a_icon; RrAppearance *a_mask; @@ -97,8 +98,9 @@ struct _ObMenuEntryFrame RrAppearance *a_bullet_selected; RrAppearance *a_separator; RrAppearance *a_text_normal; - RrAppearance *a_text_disabled; RrAppearance *a_text_selected; + RrAppearance *a_text_disabled; + RrAppearance *a_text_disabled_selected; RrAppearance *a_text_title; }; |
