From 526560b8a0871cd93f27c32442b3e470ec42ecb3 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 5 May 2007 22:26:59 +0000 Subject: changes to the client menu, which entries are there, and reorganizing, and renaming. let you highlight disabled menu entries, they just aren't runable of course, and add the activedisabled theme element for these entries. add the all desktops button picture to "All desktops" in the client menu update the themes for the new element, and some changes to make things more readable-better contrast. CLEARLOOKS-OLIVE is now DIFFERENT FROM THE 3.4 BRANCH SO DON'T RE-RUN THEMETOXML ON IT :( :( yeah.. i think that is everything? --- openbox/client_menu.c | 82 ++++++++++++++++++++++++++++++++------------------- openbox/event.c | 6 ++-- openbox/menu.c | 6 ++-- openbox/menu.h | 3 +- openbox/menuframe.c | 74 ++++++++++++++++++++++++++++++---------------- openbox/menuframe.h | 6 ++-- 6 files changed, 111 insertions(+), 66 deletions(-) (limited to 'openbox') 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; }; -- cgit v1.2.3