um... hide the client menu when the window changes desktops. its not visible anymore (probably..) and no send to menu wont be wrong too.
This commit is contained in:
parent
fa332cc314
commit
1fa08abd9c
4 changed files with 5 additions and 22 deletions
|
@ -3027,6 +3027,7 @@ void client_set_desktop_recursive(ObClient *self,
|
||||||
focus_order_to_bottom(self);
|
focus_order_to_bottom(self);
|
||||||
|
|
||||||
/* call the notifies */
|
/* call the notifies */
|
||||||
|
GSList *it;
|
||||||
for (it = client_desktop_notifies; it; it = g_slist_next(it)) {
|
for (it = client_desktop_notifies; it; it = g_slist_next(it)) {
|
||||||
ClientCallback *d = it->data;
|
ClientCallback *d = it->data;
|
||||||
d->func(self, d->data);
|
d->func(self, d->data);
|
||||||
|
|
|
@ -159,7 +159,7 @@ static gboolean self_update(ObMenuFrame *frame, gpointer data)
|
||||||
}
|
}
|
||||||
for (; it; it = next, ++i) {
|
for (; it; it = next, ++i) {
|
||||||
next = g_slist_next(it);
|
next = g_slist_next(it);
|
||||||
menu_unref(it->data);
|
menu_free(it->data);
|
||||||
desktop_menus = g_slist_delete_link(desktop_menus, it);
|
desktop_menus = g_slist_delete_link(desktop_menus, it);
|
||||||
menu_entry_remove(menu_find_entry_id(menu, i));
|
menu_entry_remove(menu_find_entry_id(menu, i));
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,26 +173,8 @@ static void desktop_change_callback(ObClient *c, gpointer data)
|
||||||
{
|
{
|
||||||
ObMenuFrame *frame = data;
|
ObMenuFrame *frame = data;
|
||||||
if (c == frame->client) {
|
if (c == frame->client) {
|
||||||
/* adding/removing entries while it's shown is not fun, so just hide
|
/* the client won't even be on the screen anymore, so hide the menu */
|
||||||
the menu and reshow it */
|
menu_frame_hide_all();
|
||||||
if (frame->parent) {
|
|
||||||
ObMenuEntryFrame *me = frame->parent_entry;
|
|
||||||
ObMenuFrame *parent = frame->parent;
|
|
||||||
gint sel =
|
|
||||||
g_list_position(frame->entries,
|
|
||||||
g_list_find(frame->entries, frame->selected));
|
|
||||||
menu_frame_select(parent, NULL, TRUE);
|
|
||||||
menu_frame_select(parent, me, TRUE);
|
|
||||||
|
|
||||||
frame = parent->child;
|
|
||||||
/* reselect the same spot or the last one if it got shorter */
|
|
||||||
sel = MIN(sel, (gint)g_list_length(frame->entries));
|
|
||||||
if (sel >= 0)
|
|
||||||
menu_frame_select(frame,
|
|
||||||
g_list_nth(frame->entries, sel)->data,
|
|
||||||
TRUE);
|
|
||||||
} else
|
|
||||||
menu_frame_hide(frame);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -361,7 +361,7 @@ static void menu_destroy_hash_value(ObMenu *self)
|
||||||
g_free(self);
|
g_free(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_unref(ObMenu *menu)
|
void menu_free(ObMenu *menu)
|
||||||
{
|
{
|
||||||
if (menu)
|
if (menu)
|
||||||
g_hash_table_remove(menu_hash, menu->name);
|
g_hash_table_remove(menu_hash, menu->name);
|
||||||
|
|
Loading…
Reference in a new issue