make the combined client list menu not suck quite as bad
This commit is contained in:
parent
fa122a3092
commit
baa4a878cd
1 changed files with 28 additions and 4 deletions
|
@ -36,6 +36,7 @@ ObMenu *combined_menu;
|
||||||
static void self_update(ObMenuFrame *frame, gpointer data)
|
static void self_update(ObMenuFrame *frame, gpointer data)
|
||||||
{
|
{
|
||||||
ObMenu *menu = frame->menu;
|
ObMenu *menu = frame->menu;
|
||||||
|
ObMenuEntry *e;
|
||||||
GList *it;
|
GList *it;
|
||||||
gint i;
|
gint i;
|
||||||
gboolean icons = FALSE;
|
gboolean icons = FALSE;
|
||||||
|
@ -44,14 +45,22 @@ static void self_update(ObMenuFrame *frame, gpointer data)
|
||||||
menu_clear_entries(menu);
|
menu_clear_entries(menu);
|
||||||
|
|
||||||
for (desktop = 0; desktop < screen_num_desktops; desktop++) {
|
for (desktop = 0; desktop < screen_num_desktops; desktop++) {
|
||||||
|
gboolean empty = TRUE;
|
||||||
|
|
||||||
|
menu_add_separator(menu, -1);
|
||||||
|
e = menu_add_normal(menu, -1, NULL, NULL);
|
||||||
|
e->data.normal.enabled = FALSE;
|
||||||
|
e->data.normal.label = g_strdup(screen_desktop_names[desktop]);
|
||||||
|
menu_add_separator(menu, -1);
|
||||||
for (it = focus_order[desktop], i = 0; it; it = g_list_next(it), ++i) {
|
for (it = focus_order[desktop], i = 0; it; it = g_list_next(it), ++i) {
|
||||||
ObClient *c = it->data;
|
ObClient *c = it->data;
|
||||||
if (client_normal(c) && (!c->skip_taskbar || c->iconic)) {
|
if (client_normal(c) && (!c->skip_taskbar || c->iconic)) {
|
||||||
GSList *acts = NULL;
|
GSList *acts = NULL;
|
||||||
ObAction* act;
|
ObAction* act;
|
||||||
ObMenuEntry *e;
|
|
||||||
const ObClientIcon *icon;
|
const ObClientIcon *icon;
|
||||||
|
|
||||||
|
empty = FALSE;
|
||||||
|
|
||||||
if (!icons && c->iconic) {
|
if (!icons && c->iconic) {
|
||||||
icons = TRUE;
|
icons = TRUE;
|
||||||
menu_add_separator(menu, -1);
|
menu_add_separator(menu, -1);
|
||||||
|
@ -76,9 +85,22 @@ static void self_update(ObMenuFrame *frame, gpointer data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
menu_add_separator(menu, -1);
|
|
||||||
menu_add_separator(menu, -1);
|
|
||||||
icons = FALSE;
|
icons = FALSE;
|
||||||
|
|
||||||
|
if (empty) {
|
||||||
|
/* no entries */
|
||||||
|
|
||||||
|
GSList *acts = NULL;
|
||||||
|
ObAction* act;
|
||||||
|
ObMenuEntry *e;
|
||||||
|
|
||||||
|
act = action_from_string("Desktop", OB_USER_ACTION_MENU_SELECTION);
|
||||||
|
act->data.desktop.desk = desktop;
|
||||||
|
acts = g_slist_append(acts, act);
|
||||||
|
e = menu_add_normal(menu, 0, _("Go there..."), acts);
|
||||||
|
if (desktop == screen_desktop)
|
||||||
|
e->data.normal.enabled = FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +125,9 @@ static void client_dest(ObClient *client, gpointer data)
|
||||||
GList *eit;
|
GList *eit;
|
||||||
for (eit = combined_menu->entries; eit; eit = g_list_next(eit)) {
|
for (eit = combined_menu->entries; eit; eit = g_list_next(eit)) {
|
||||||
ObMenuEntry *meit = eit->data;
|
ObMenuEntry *meit = eit->data;
|
||||||
if (meit->type == OB_MENU_ENTRY_TYPE_NORMAL) {
|
if (meit->type == OB_MENU_ENTRY_TYPE_NORMAL &&
|
||||||
|
meit->data.normal.actions)
|
||||||
|
{
|
||||||
ObAction *a = meit->data.normal.actions->data;
|
ObAction *a = meit->data.normal.actions->data;
|
||||||
ObClient *c = a->data.any.c;
|
ObClient *c = a->data.any.c;
|
||||||
if (c == client)
|
if (c == client)
|
||||||
|
|
Loading…
Reference in a new issue