X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient_menu.c;h=fc88025cdb47e71211ae7c3d29082930eb14a1ec;hb=5d5be2ba2a6e0b3886e0076475ed9d7a2d4ac9ab;hp=bd57f06d8d4667c680cbe52bf849d05a1962d847;hpb=a9567a816385f8f66ed0f827bb4af78cdb10cd6d;p=chaz%2Fopenbox diff --git a/openbox/client_menu.c b/openbox/client_menu.c index bd57f06d..fc88025c 100644 --- a/openbox/client_menu.c +++ b/openbox/client_menu.c @@ -1,10 +1,28 @@ -#include "kernel/debug.h" -#include "kernel/menu.h" -#include "kernel/menuframe.h" -#include "kernel/screen.h" -#include "kernel/client.h" -#include "kernel/openbox.h" -#include "kernel/frame.h" +/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + client_menu.c for the Openbox window manager + Copyright (c) 2003-2007 Dana Jansens + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + See the COPYING file for a copy of the GNU General Public License. +*/ + +#include "debug.h" +#include "menu.h" +#include "menuframe.h" +#include "screen.h" +#include "client.h" +#include "openbox.h" +#include "frame.h" #include "gettext.h" #include @@ -39,8 +57,6 @@ static void client_update(ObMenuFrame *frame, gpointer data) ObMenuEntry *e; GList *it; - frame->show_title = FALSE; - for (it = menu->entries; it; it = g_list_next(it)) { e = it->data; if (e->type == OB_MENU_ENTRY_TYPE_NORMAL) @@ -54,9 +70,14 @@ static void client_update(ObMenuFrame *frame, gpointer data) e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_ICONIFY; 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"))); e->data.normal.enabled =frame->client->functions & OB_CLIENT_FUNC_MAXIMIZE; e = menu_find_entry_id(menu, CLIENT_SHADE); + menu_entry_set_label(e, (frame->client->shaded ? + _("&Roll down") : _("&Roll up"))); e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_SHADE; e = menu_find_entry_id(menu, CLIENT_MOVE); @@ -67,6 +88,9 @@ static void client_update(ObMenuFrame *frame, gpointer data) e = menu_find_entry_id(menu, CLIENT_CLOSE); e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_CLOSE; + + e = menu_find_entry_id(menu, CLIENT_DECORATE); + e->data.normal.enabled = client_normal(frame->client); } static void layer_update(ObMenuFrame *frame, gpointer data) @@ -100,6 +124,7 @@ static void send_to_update(ObMenuFrame *frame, gpointer data) guint i; GSList *acts; ObAction *act; + ObMenuEntry *e;; menu_clear_entries(menu); @@ -107,11 +132,11 @@ static void send_to_update(ObMenuFrame *frame, gpointer data) return; for (i = 0; i <= screen_num_desktops; ++i) { - gchar *name; + const gchar *name; guint desk; if (i >= screen_num_desktops) { - menu_add_separator(menu, -1); + menu_add_separator(menu, -1, NULL); desk = DESKTOP_ALL; name = _("All desktops"); @@ -120,17 +145,15 @@ static void send_to_update(ObMenuFrame *frame, gpointer data) name = screen_desktop_names[i]; } - act = action_from_string("SendToDesktop"); + act = action_from_string("SendToDesktop", + OB_USER_ACTION_MENU_SELECTION); act->data.sendto.desk = desk; act->data.sendto.follow = FALSE; acts = g_slist_prepend(NULL, act); - menu_add_normal(menu, desk, name, acts); + e = menu_add_normal(menu, desk, name, acts); - if (frame->client->desktop == desk) { - ObMenuEntry *e = menu_find_entry_id(menu, desk); - g_assert(e); + if (frame->client->desktop == desk) e->data.normal.enabled = FALSE; - } } } @@ -138,59 +161,95 @@ void client_menu_startup() { GSList *acts; ObMenu *menu; + ObMenuEntry *e; - menu = menu_new(LAYER_MENU_NAME, _("Layer"), NULL); + menu = menu_new(LAYER_MENU_NAME, _("&Layer"), NULL); + menu_show_all_shortcuts(menu, TRUE); menu_set_update_func(menu, layer_update); - acts = g_slist_prepend(NULL, action_from_string("SendToTopLayer")); - menu_add_normal(menu, LAYER_TOP, _("Always on top"), acts); + acts = g_slist_prepend(NULL, action_from_string + ("SendToTopLayer", OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, LAYER_TOP, _("Always on &top"), acts); - acts = g_slist_prepend(NULL, action_from_string("SendToNormalLayer")); - menu_add_normal(menu, LAYER_NORMAL, _("Normal"), acts); + acts = g_slist_prepend(NULL, action_from_string + ("SendToNormalLayer", + OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, LAYER_NORMAL, _("&Normal"), acts); - acts = g_slist_prepend(NULL, action_from_string("SendToBottomLayer")); - menu_add_normal(menu, LAYER_BOTTOM, _("Always on bottom"),acts); + acts = g_slist_prepend(NULL, action_from_string + ("SendToBottomLayer", + OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, LAYER_BOTTOM, _("Always on &bottom"),acts); - menu = menu_new(SEND_TO_MENU_NAME, _("Send to desktop"), NULL); + menu = menu_new(SEND_TO_MENU_NAME, _("&Send to desktop"), NULL); + menu_show_all_shortcuts(menu, TRUE); menu_set_update_func(menu, send_to_update); menu = menu_new(CLIENT_MENU_NAME, _("Client menu"), NULL); + menu_show_all_shortcuts(menu, TRUE); menu_set_update_func(menu, client_update); menu_add_submenu(menu, CLIENT_SEND_TO, SEND_TO_MENU_NAME); menu_add_submenu(menu, CLIENT_LAYER, LAYER_MENU_NAME); - acts = g_slist_prepend(NULL, action_from_string("Iconify")); - menu_add_normal(menu, CLIENT_ICONIFY, _("Iconify"), acts); - - acts = g_slist_prepend(NULL, action_from_string("ToggleMaximizeFull")); - menu_add_normal(menu, CLIENT_MAXIMIZE, _("Maximize"), acts); - - acts = g_slist_prepend(NULL, action_from_string("Raise")); - menu_add_normal(menu, CLIENT_RAISE, _("Raise to top"), acts); - - acts = g_slist_prepend(NULL, action_from_string("Lower")); - menu_add_normal(menu, CLIENT_LOWER, _("Lower to bottom"),acts); - - acts = g_slist_prepend(NULL, action_from_string("ToggleShade")); - menu_add_normal(menu, CLIENT_SHADE, _("Roll up/down"), acts); - - acts = g_slist_prepend(NULL, action_from_string("ToggleDecorations")); - menu_add_normal(menu, CLIENT_DECORATE, _("Decorate"), acts); - - menu_add_separator(menu, -1); - - acts = g_slist_prepend(NULL, action_from_string("KeyboardMove")); - menu_add_normal(menu, CLIENT_MOVE, _("Move"), acts); - - acts = g_slist_prepend(NULL, action_from_string("KeyboardResize")); - menu_add_normal(menu, CLIENT_RESIZE, _("Resize"), acts); - - menu_add_separator(menu, -1); - - acts = g_slist_prepend(NULL, action_from_string("Close")); - menu_add_normal(menu, CLIENT_CLOSE, _("Close"), acts); + acts = g_slist_prepend(NULL, action_from_string + ("Iconify", OB_USER_ACTION_MENU_SELECTION)); + e = menu_add_normal(menu, CLIENT_ICONIFY, _("Ico&nify"), acts); + 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; + + acts = g_slist_prepend(NULL, action_from_string + ("ToggleMaximizeFull", + OB_USER_ACTION_MENU_SELECTION)); + e = menu_add_normal(menu, CLIENT_MAXIMIZE, "MAXIMIZE", acts); + 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); + + acts = g_slist_prepend(NULL, action_from_string + ("Lower", OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, CLIENT_LOWER, _("Lower to &bottom"),acts); + + acts = g_slist_prepend(NULL, action_from_string + ("ToggleShade", OB_USER_ACTION_MENU_SELECTION)); + e = menu_add_normal(menu, CLIENT_SHADE, "SHADE", acts); + 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; + + acts = g_slist_prepend(NULL, action_from_string + ("ToggleDecorations", + OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, CLIENT_DECORATE, _("&Decorate"), acts); + + 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); + + acts = g_slist_prepend(NULL, action_from_string + ("Resize", OB_USER_ACTION_MENU_SELECTION)); + menu_add_normal(menu, CLIENT_RESIZE, _("&Resize"), acts); + + menu_add_separator(menu, -1, NULL); + + acts = g_slist_prepend(NULL, action_from_string + ("Close", OB_USER_ACTION_MENU_SELECTION)); + e = menu_add_normal(menu, CLIENT_CLOSE, _("&Close"), acts); + 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; }