static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
gpointer data);
static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
- gchar **strippedlabel, guint *position);
+ gchar **strippedlabel, guint *position,
+ gboolean *always_show);
static void client_dest(ObClient *client, gpointer data)
((c) >= 'a' && (c) <= 'z'))
static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
- gchar **strippedlabel, guint *position)
+ gchar **strippedlabel, guint *position,
+ gboolean *always_show)
{
gunichar shortcut = 0;
*position = 0;
+ *always_show = FALSE;
g_assert(strippedlabel != NULL);
if (VALID_SHORTCUT(*(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)
self->data = data;
self->shortcut = parse_shortcut(title, allow_shortcut_selection,
- &self->title, &self->shortcut_position);
+ &self->title, &self->shortcut_position,
+ &self->shortcut_always_show);
g_hash_table_replace(menu_hash, self->name, self);
return FALSE; /* no repeat */
}
-void menu_show(gchar *name, gint x, gint y, gint button, ObClient *client)
+void menu_show(gchar *name, gint x, gint y, gboolean mouse, ObClient *client)
{
ObMenu *self;
ObMenuFrame *frame;
menu_clear_pipe_caches();
frame = menu_frame_new(self, 0, client);
- if (!menu_frame_show_topmenu(frame, x, y, button))
+ if (!menu_frame_show_topmenu(frame, x, y, mouse))
menu_frame_free(frame);
else {
- if (!button) {
+ if (!mouse) {
/* select the first entry if it's not a submenu and we opened
* the menu with the keyboard, and skip all headers */
GList *it = frame->entries;
}
/* reset the hide timer */
- if (!button)
+ if (!mouse)
menu_can_hide = TRUE;
else {
menu_can_hide = FALSE;
g_free(self->data.normal.label);
self->data.normal.shortcut =
parse_shortcut(label, allow_shortcut, &self->data.normal.label,
- &self->data.normal.shortcut_position);
+ &self->data.normal.shortcut_position,
+ &self->data.normal.shortcut_always_show);
break;
default:
g_assert_not_reached();