static void menu_entry_frame_free(ObMenuEntryFrame *self)
{
if (self) {
- menu_entry_unref(self->entry);
-
window_remove(self->window);
XDestroyWindow(obt_display, self->text);
g_hash_table_remove(menu_frame_map, &self->bullet);
}
+ menu_entry_unref(self->entry);
g_slice_free(ObMenuEntryFrame, self);
}
}
XMoveWindow(obt_display, self->window, self->area.x, self->area.y);
}
-static void menu_frame_place_topmenu(ObMenuFrame *self, GravityPoint *pos,
+static void menu_frame_place_topmenu(ObMenuFrame *self, const GravityPoint *pos,
gint *x, gint *y, gint monitor,
gboolean user_positioned)
{
return TRUE;
}
-gboolean menu_frame_show_topmenu(ObMenuFrame *self, GravityPoint pos,
+gboolean menu_frame_show_topmenu(ObMenuFrame *self, const GravityPoint *pos,
gint monitor, gboolean mouse,
gboolean user_positioned)
{
return FALSE;
if (self->menu->place_func) {
- x = pos.x.pos;
- y = pos.y.pos;
+ x = pos->x.pos;
+ y = pos->y.pos;
self->menu->place_func(self, &x, &y, mouse, self->menu->data);
} else {
- menu_frame_place_topmenu(self, &pos, &x, &y, monitor,
+ menu_frame_place_topmenu(self, pos, &x, &y, monitor,
user_positioned);
}
static void remove_submenu_hide_timeout(ObMenuFrame *child)
{
if (submenu_hide_timer) g_source_remove(submenu_hide_timer);
- submenu_hide_timer = 0;
}
gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent,
{
GList *it;
- if (config_submenu_show_delay) {
+ if (config_submenu_show_delay && submenu_show_timer)
/* remove any submenu open requests */
- if (submenu_show_timer) g_source_remove(submenu_show_timer);
- submenu_show_timer = 0;
- }
+ g_source_remove(submenu_show_timer);
if ((it = g_list_last(menu_frame_visible)))
menu_frame_hide(it->data);
}
return FALSE;
}
+static void submenu_show_dest(gpointer data)
+{
+ submenu_show_timer = 0;
+}
+
static gboolean submenu_hide_timeout(gpointer data)
{
g_assert(menu_frame_visible);
return FALSE;
}
+static void submenu_hide_dest(gpointer data)
+{
+ submenu_hide_timer = 0;
+}
+
void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry,
gboolean immediate)
{
if (!entry && oldchild_entry)
entry = oldchild_entry;
- if (config_submenu_show_delay) {
+ if (config_submenu_show_delay && submenu_show_timer)
/* remove any submenu open requests */
- if (submenu_show_timer) g_source_remove(submenu_show_timer);
- submenu_show_timer = 0;
- }
+ g_source_remove(submenu_show_timer);
self->selected = entry;
submenu_hide_timer =
g_timeout_add_full(G_PRIORITY_DEFAULT,
config_submenu_hide_delay,
- submenu_hide_timeout, oldchild, NULL);
+ submenu_hide_timeout, oldchild, submenu_hide_dest);
}
}
}
g_timeout_add_full(G_PRIORITY_DEFAULT,
config_submenu_show_delay,
submenu_show_timeout,
- self->selected, NULL);
+ self->selected, submenu_show_dest);
}
}
/* hide the grandchildren of this menu. and move the cursor to