X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=58b6280e5d6c4939a775d6bfcc08bb39d806c176;hb=bafd9e9edcff0e18a03ef6f4e73d673e12a7c7ed;hp=b49177ba8b4473059ed05dfec7f970acecbc4d38;hpb=d519deeb2e24ba27664a231c6579bee1e02b4ebb;p=chaz%2Fopenbox diff --git a/openbox/menu.c b/openbox/menu.c index b49177ba..58b6280e 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -62,7 +62,6 @@ static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut, gchar **strippedlabel, guint *position, gboolean *always_show); - static void client_dest(ObClient *client, gpointer data) { /* menus can be associated with a client, so close any that are since @@ -100,7 +99,7 @@ void menu_startup(gboolean reconfig) parse_tree(menu_parse_inst, doc, node->children); xmlFreeDoc(doc); } else - g_message(_("Unable to find a valid menu file '%s'"), + g_message(_("Unable to find a valid menu file \"%s\""), (const gchar*)it->data); } if (!loaded) { @@ -108,10 +107,10 @@ void menu_startup(gboolean reconfig) parse_tree(menu_parse_inst, doc, node->children); xmlFreeDoc(doc); } else - g_message(_("Unable to find a valid menu file '%s'"), + g_message(_("Unable to find a valid menu file \"%s\""), "menu.xml"); } - + g_assert(menu_parse_state.parent == NULL); if (!reconfig) @@ -147,7 +146,7 @@ static void clear_cache(gpointer key, gpointer val, gpointer data) menu_clear_entries(menu); } -void menu_clear_pipe_caches() +void menu_clear_pipe_caches(void) { /* delete any pipe menus' submenus */ g_hash_table_foreach_remove(menu_hash, menu_pipe_submenu, NULL); @@ -168,7 +167,7 @@ void menu_pipe_execute(ObMenu *self) return; if (!g_spawn_command_line_sync(self->execute, &output, NULL, NULL, &err)) { - g_message(_("Failed to execute command for pipe-menu '%s': %s"), + g_message(_("Failed to execute command for pipe-menu \"%s\": %s"), self->execute, err->message); g_error_free(err); return; @@ -182,7 +181,7 @@ void menu_pipe_execute(ObMenu *self) parse_tree(menu_parse_inst, doc, node->children); xmlFreeDoc(doc); } else { - g_message(_("Invalid output from pipe-menu '%s'"), self->execute); + g_message(_("Invalid output from pipe-menu \"%s\""), self->execute); } g_free(output); @@ -195,10 +194,10 @@ static ObMenu* menu_from_name(gchar *name) g_assert(name != NULL); if (!(self = g_hash_table_lookup(menu_hash, name))) - g_message(_("Attempted to access menu '%s' but it does not exist"), + g_message(_("Attempted to access menu \"%s\" but it does not exist"), name); return self; -} +} #define VALID_SHORTCUT(c) (((c) >= '0' && (c) <= '9') || \ ((c) >= 'A' && (c) <= 'Z') || \ @@ -209,7 +208,7 @@ static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut, gboolean *always_show) { gunichar shortcut = 0; - + *position = 0; *always_show = FALSE; @@ -233,10 +232,13 @@ static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut, /* you have to use a printable ascii character for shortcuts don't allow space either, so you can have like "a _ b" */ - if (VALID_SHORTCUT(*(i+1))) { - shortcut = g_unichar_tolower(g_utf8_get_char(i+1)); - *position = i - *strippedlabel; - *always_show = TRUE; + if (VALID_SHORTCUT(*(i+1)) || *(i+1) == '_') { + /* Allow you to escape the first _ by putting __ */ + if (*(i+1) != '_') { + shortcut = g_unichar_tolower(g_utf8_get_char(i+1)); + *position = i - *strippedlabel; + *always_show = TRUE; + } /* remove the '_' from the string */ for (; *i != '\0'; ++i) @@ -268,7 +270,7 @@ static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, { ObMenuParseState *state = data; gchar *label; - + if (state->parent) { if (parse_attr_string("label", node, &label)) { GSList *acts = NULL; @@ -370,13 +372,6 @@ ObMenu* menu_new(const gchar *name, const gchar *title, self->more_menu->data = data; self->more_menu->shortcut = g_unichar_tolower(g_utf8_get_char("M")); - self->more_menu->show_func = self->show_func; - self->more_menu->hide_func = self->hide_func; - self->more_menu->update_func = self->update_func; - self->more_menu->execute_func = self->execute_func; - self->more_menu->destroy_func = self->destroy_func; - self->more_menu->place_func = self->place_func; - return self; } @@ -472,7 +467,7 @@ void menu_show(gchar *name, gint x, gint y, gboolean mouse, ObClient *client) } } -gboolean menu_hide_delay_reached() +gboolean menu_hide_delay_reached(void) { return menu_can_hide; } @@ -511,6 +506,7 @@ void menu_entry_unref(ObMenuEntry *self) if (self && --self->ref == 0) { switch (self->type) { case OB_MENU_ENTRY_TYPE_NORMAL: + RrImageUnref(self->data.normal.icon); g_free(self->data.normal.label); while (self->data.normal.actions) { actions_act_unref(self->data.normal.actions->data); @@ -523,6 +519,7 @@ void menu_entry_unref(ObMenuEntry *self) g_free(self->data.submenu.name); break; case OB_MENU_ENTRY_TYPE_SEPARATOR: + g_free(self->data.separator.label); break; } @@ -612,19 +609,16 @@ ObMenuEntry* menu_add_separator(ObMenu *self, gint id, const gchar *label) void menu_set_show_func(ObMenu *self, ObMenuShowFunc func) { self->show_func = func; - self->more_menu->show_func = func; /* keep it in sync */ } void menu_set_hide_func(ObMenu *self, ObMenuHideFunc func) { self->hide_func = func; - self->more_menu->hide_func = func; /* keep it in sync */ } void menu_set_update_func(ObMenu *self, ObMenuUpdateFunc func) { self->update_func = func; - self->more_menu->update_func = func; /* keep it in sync */ } void menu_set_execute_func(ObMenu *self, ObMenuExecuteFunc func) @@ -636,13 +630,11 @@ void menu_set_execute_func(ObMenu *self, ObMenuExecuteFunc func) void menu_set_destroy_func(ObMenu *self, ObMenuDestroyFunc func) { self->destroy_func = func; - self->more_menu->destroy_func = func; /* keep it in sync */ } void menu_set_place_func(ObMenu *self, ObMenuPlaceFunc func) { self->place_func = func; - self->more_menu->place_func = func; /* keep it in sync */ } ObMenuEntry* menu_find_entry_id(ObMenu *self, gint id)