static ObtXmlInst *menu_parse_inst;
static ObMenuParseState menu_parse_state;
static gboolean menu_can_hide = FALSE;
+static guint menu_timeout_id = 0;
static void menu_destroy_hash_value(ObMenu *self);
static void parse_menu_item(xmlNodePtr node, gpointer data);
if (config_menu_show_icons &&
obt_xml_attr_string(node, "icon", &icon))
{
- RrImage *ic;
-
- ic = RrImageCacheFindName(ob_rr_icons, icon);
- if (ic)
- RrImageRef(ic);
- else {
- ic = RrImageNew(ob_rr_icons);
- if (!RrImageAddPictureName(ic, icon)) {
- RrImageUnref(ic); /* no need to keep it around */
- ic = NULL;
- }
- }
- e->data.normal.icon = ic;
+ e->data.normal.icon = RrImageNewFromName(ob_rr_icons, icon);
if (e->data.normal.icon)
e->data.normal.icon_alpha = 0xff;
static gboolean menu_hide_delay_func(gpointer data)
{
menu_can_hide = TRUE;
+ menu_timeout_id = 0;
return FALSE; /* no repeat */
}
menu_can_hide = TRUE;
else {
menu_can_hide = FALSE;
- obt_main_loop_timeout_add(ob_main_loop,
- config_menu_hide_delay * 1000,
- menu_hide_delay_func,
- NULL, g_direct_equal, NULL);
+ if (menu_timeout_id) g_source_remove(menu_timeout_id);
+ menu_timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT,
+ config_menu_hide_delay,
+ menu_hide_delay_func,
+ NULL, NULL);
}
}
}