patch from syscrash2k, adds submenuShowDelay option, bug #2682
This commit is contained in:
parent
ad215303e7
commit
310d268bf0
3 changed files with 36 additions and 2 deletions
|
@ -70,6 +70,7 @@ gint config_mouse_dclicktime;
|
||||||
gboolean config_menu_warppointer;
|
gboolean config_menu_warppointer;
|
||||||
gboolean config_menu_xorstyle;
|
gboolean config_menu_xorstyle;
|
||||||
guint config_menu_hide_delay;
|
guint config_menu_hide_delay;
|
||||||
|
guint config_submenu_show_delay;
|
||||||
gboolean config_menu_client_list_icons;
|
gboolean config_menu_client_list_icons;
|
||||||
|
|
||||||
GSList *config_menu_files;
|
GSList *config_menu_files;
|
||||||
|
@ -422,6 +423,8 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
||||||
config_menu_xorstyle = parse_bool(doc, n);
|
config_menu_xorstyle = parse_bool(doc, n);
|
||||||
if ((n = parse_find_node("hideDelay", node)))
|
if ((n = parse_find_node("hideDelay", node)))
|
||||||
config_menu_hide_delay = parse_int(doc, n);
|
config_menu_hide_delay = parse_int(doc, n);
|
||||||
|
if ((n = parse_find_node("submenuShowDelay", node)))
|
||||||
|
config_submenu_show_delay = parse_int(doc, n);
|
||||||
if ((n = parse_find_node("desktopMenuIcons", node)))
|
if ((n = parse_find_node("desktopMenuIcons", node)))
|
||||||
config_menu_client_list_icons = parse_bool(doc, n);
|
config_menu_client_list_icons = parse_bool(doc, n);
|
||||||
}
|
}
|
||||||
|
@ -617,6 +620,7 @@ void config_startup(ObParseInst *i)
|
||||||
config_menu_warppointer = TRUE;
|
config_menu_warppointer = TRUE;
|
||||||
config_menu_xorstyle = TRUE;
|
config_menu_xorstyle = TRUE;
|
||||||
config_menu_hide_delay = 250;
|
config_menu_hide_delay = 250;
|
||||||
|
config_submenu_show_delay = 0;
|
||||||
config_menu_client_list_icons = TRUE;
|
config_menu_client_list_icons = TRUE;
|
||||||
config_menu_files = NULL;
|
config_menu_files = NULL;
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,8 @@ extern gboolean config_menu_warppointer;
|
||||||
extern gboolean config_menu_xorstyle;
|
extern gboolean config_menu_xorstyle;
|
||||||
/*! delay for hiding menu when opening */
|
/*! delay for hiding menu when opening */
|
||||||
extern guint config_menu_hide_delay;
|
extern guint config_menu_hide_delay;
|
||||||
|
/*! delay before opening a submenu */
|
||||||
|
extern guint config_submenu_show_delay;
|
||||||
/*! show icons in client_list_menu */
|
/*! show icons in client_list_menu */
|
||||||
extern gboolean config_menu_client_list_icons;
|
extern gboolean config_menu_client_list_icons;
|
||||||
/*! User-specified menu files */
|
/*! User-specified menu files */
|
||||||
|
|
|
@ -43,6 +43,7 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry,
|
||||||
static void menu_entry_frame_free(ObMenuEntryFrame *self);
|
static void menu_entry_frame_free(ObMenuEntryFrame *self);
|
||||||
static void menu_frame_render(ObMenuFrame *self);
|
static void menu_frame_render(ObMenuFrame *self);
|
||||||
static void menu_frame_update(ObMenuFrame *self);
|
static void menu_frame_update(ObMenuFrame *self);
|
||||||
|
static gboolean menu_entry_frame_submenu_timeout(gpointer data);
|
||||||
|
|
||||||
static Window createWindow(Window parent, gulong mask,
|
static Window createWindow(Window parent, gulong mask,
|
||||||
XSetWindowAttributes *attrib)
|
XSetWindowAttributes *attrib)
|
||||||
|
@ -663,6 +664,11 @@ void menu_frame_hide(ObMenuFrame *self)
|
||||||
|
|
||||||
void menu_frame_hide_all()
|
void menu_frame_hide_all()
|
||||||
{
|
{
|
||||||
|
if (config_submenu_show_delay) {
|
||||||
|
/* remove any submenu open requests */
|
||||||
|
ob_main_loop_timeout_remove(ob_main_loop,
|
||||||
|
menu_entry_frame_submenu_timeout);
|
||||||
|
}
|
||||||
GList *it = g_list_last(menu_frame_visible);
|
GList *it = g_list_last(menu_frame_visible);
|
||||||
if (it)
|
if (it)
|
||||||
menu_frame_hide(it->data);
|
menu_frame_hide(it->data);
|
||||||
|
@ -717,6 +723,12 @@ ObMenuEntryFrame* menu_entry_frame_under(gint x, gint y)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean menu_entry_frame_submenu_timeout(gpointer data)
|
||||||
|
{
|
||||||
|
menu_entry_frame_show_submenu((ObMenuEntryFrame*)data);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry)
|
void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry)
|
||||||
{
|
{
|
||||||
ObMenuEntryFrame *old = self->selected;
|
ObMenuEntryFrame *old = self->selected;
|
||||||
|
@ -726,6 +738,12 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry)
|
||||||
entry = old;
|
entry = old;
|
||||||
|
|
||||||
if (old == entry) return;
|
if (old == entry) return;
|
||||||
|
|
||||||
|
if (config_submenu_show_delay) {
|
||||||
|
/* remove any submenu open requests */
|
||||||
|
ob_main_loop_timeout_remove(ob_main_loop,
|
||||||
|
menu_entry_frame_submenu_timeout);
|
||||||
|
}
|
||||||
|
|
||||||
self->selected = entry;
|
self->selected = entry;
|
||||||
|
|
||||||
|
@ -737,8 +755,18 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry)
|
||||||
if (self->selected) {
|
if (self->selected) {
|
||||||
menu_entry_frame_render(self->selected);
|
menu_entry_frame_render(self->selected);
|
||||||
|
|
||||||
if (self->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
|
if (self->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) {
|
||||||
menu_entry_frame_show_submenu(self->selected);
|
if (config_submenu_show_delay) {
|
||||||
|
/* initiate a new submenu open request */
|
||||||
|
ob_main_loop_timeout_add(ob_main_loop,
|
||||||
|
config_submenu_show_delay * 1000,
|
||||||
|
menu_entry_frame_submenu_timeout,
|
||||||
|
self->selected,
|
||||||
|
NULL);
|
||||||
|
} else {
|
||||||
|
menu_entry_frame_show_submenu(self->selected);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue