From a9567a816385f8f66ed0f827bb4af78cdb10cd6d Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 29 Aug 2003 07:56:49 +0000 Subject: move the client and client-list menus into the 'kernel' --- Makefile.am | 88 +---------------- data/menu | 2 +- data/rc3 | 20 +--- openbox/client_list_menu.c | 116 +++++++++++++++++++++++ openbox/client_list_menu.h | 6 ++ openbox/client_menu.c | 196 ++++++++++++++++++++++++++++++++++++++ openbox/client_menu.h | 6 ++ plugins/menu/client_list_menu.c | 132 -------------------------- plugins/menu/client_menu.c | 204 ---------------------------------------- 9 files changed, 335 insertions(+), 435 deletions(-) create mode 100644 openbox/client_list_menu.c create mode 100644 openbox/client_list_menu.h create mode 100644 openbox/client_menu.c create mode 100644 openbox/client_menu.h delete mode 100644 plugins/menu/client_list_menu.c delete mode 100644 plugins/menu/client_menu.c diff --git a/Makefile.am b/Makefile.am index 49d94bf5..d8594793 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,7 +3,6 @@ SUBDIRS = m4 po themedir = $(datadir)/openbox/themes localedir = $(datadir)/locale rcdir = $(datadir)/openbox -plugindir = $(libdir)/openbox/plugins desktopfilesdir = $(datadir)/gnome/wm-properties pixmapdir = $(datadir)/pixmaps @@ -25,13 +24,6 @@ bin_PROGRAMS = \ kernel/openbox \ tools/kdetrayproxy/kdetrayproxy -plugin_LTLIBRARIES = \ - plugins/menu/client_menu.la \ - plugins/menu/client_list_menu.la -# plugins/menu/timed_menu.la \ -# plugins/menu/fifo_menu.la \ -# plugins/menu/include_menu.la \ - if OBCONF bin_PROGRAMS += \ tools/obconf/obconf @@ -103,7 +95,6 @@ kernel_openbox_CPPFLAGS = \ $(LIBSN_CFLAGS) \ $(XML_CFLAGS) \ -DLOCALEDIR=\"$(localedir)\" \ - -DPLUGINDIR=\"$(plugindir)\" \ -DRCDIR=\"$(rcdir)\" \ -DG_LOG_DOMAIN=\"Openbox\" kernel_openbox_LDADD = \ @@ -128,6 +119,10 @@ kernel_openbox_SOURCES = \ kernel/action.h \ kernel/client.c \ kernel/client.h \ + kernel/client_list_menu.c \ + kernel/client_list_menu.h \ + kernel/client_menu.c \ + kernel/client_menu.h \ kernel/config.c \ kernel/config.h \ kernel/debug.c \ @@ -167,8 +162,6 @@ kernel_openbox_SOURCES = \ kernel/openbox.h \ kernel/place.c \ kernel/place.h \ - kernel/plugin.c \ - kernel/plugin.h \ kernel/popup.c \ kernel/popup.h \ kernel/prop.c \ @@ -190,78 +183,7 @@ kernel_openbox_SOURCES = \ kernel/window.c \ kernel/window.h \ kernel/xerror.c \ - kernel/xerror.h \ - plugins/interface.h - -## plugins/menu ## - -plugins_menu_timed_menu_la_CPPFLAGS = \ - $(XFT_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(LIBSN_CFLAGS) \ - $(XML_CFLAGS) \ - -DPLUGINDIR=\"$(plugindir)\" \ - -DG_LOG_DOMAIN=\"Plugin-Timed-Menu\" -plugins_menu_timed_menu_la_LDFLAGS = \ - -module \ - -avoid-version -plugins_menu_timed_menu_la_SOURCES = \ - plugins/menu/timed_menu.c \ - plugins/menu/timed_menu.h - -plugins_menu_fifo_menu_la_CPPFLAGS = \ - $(XFT_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(LIBSN_CFLAGS) \ - $(XML_CFLAGS) \ - -DPLUGINDIR=\"$(plugindir)\" \ - -DG_LOG_DOMAIN=\"Plugin-Fifo-Menu\" -plugins_menu_fifo_menu_la_LDFLAGS = \ - -module \ - -avoid-version -plugins_menu_fifo_menu_la_SOURCES = \ - plugins/menu/fifo_menu.c \ - plugins/menu/fifo_menu.h - -plugins_menu_client_menu_la_CPPFLAGS = \ - $(XFT_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(LIBSN_CFLAGS) \ - $(XML_CFLAGS) \ - -DPLUGINDIR=\"$(plugindir)\" \ - -DG_LOG_DOMAIN=\"Plugin-Client-Menu\" -plugins_menu_client_menu_la_LDFLAGS = \ - -module \ - -avoid-version -plugins_menu_client_menu_la_SOURCES = \ - plugins/menu/client_menu.c - -plugins_menu_include_menu_la_CPPFLAGS = \ - $(XFT_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(LIBSN_CFLAGS) \ - $(XML_CFLAGS) \ - -DPLUGINDIR=\"$(plugindir)\" \ - -DG_LOG_DOMAIN=\"Plugin-Include-Menu\" -plugins_menu_include_menu_la_LDFLAGS = \ - -module \ - -avoid-version -plugins_menu_include_menu_la_SOURCES = \ - plugins/menu/include_menu.c - -plugins_menu_client_list_menu_la_CPPFLAGS = \ - $(XFT_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(LIBSN_CFLAGS) \ - $(XML_CFLAGS) \ - -DPLUGINDIR=\"$(plugindir)\" \ - -DG_LOG_DOMAIN=\"Plugin-Client-List-Menu\" -plugins_menu_client_list_menu_la_LDFLAGS = \ - -module \ - -avoid-version -plugins_menu_client_list_menu_la_SOURCES = \ -o plugins/menu/client_list_menu.c - + kernel/xerror.h ## obconf ## diff --git a/data/menu b/data/menu index 0677e73a..a3c973e8 100644 --- a/data/menu +++ b/data/menu @@ -31,7 +31,7 @@ - + diff --git a/data/rc3 b/data/rc3 index 49f004a4..38ff0a80 100644 --- a/data/rc3 +++ b/data/rc3 @@ -132,9 +132,7 @@ - - client-menu - + client-menu @@ -172,9 +170,7 @@ - - client-menu - + client-menu @@ -240,14 +236,10 @@ - - client-menu - + client-menu - - client-menu - + client-menu @@ -313,9 +305,7 @@ - - client-list-menu - + client-list-menu diff --git a/openbox/client_list_menu.c b/openbox/client_list_menu.c new file mode 100644 index 00000000..cf3b8d5d --- /dev/null +++ b/openbox/client_list_menu.c @@ -0,0 +1,116 @@ +#include "kernel/openbox.h" +#include "kernel/menu.h" +#include "kernel/menuframe.h" +#include "kernel/action.h" +#include "kernel/screen.h" +#include "kernel/client.h" +#include "kernel/focus.h" +#include "gettext.h" + +#include + +#define MENU_NAME "client-list-menu" + +static GSList *desktop_menus; + +typedef struct { + guint desktop; +} DesktopData; + +void plugin_setup_config() { } + +static void desk_menu_update(ObMenuFrame *frame, gpointer data) +{ + ObMenu *menu = frame->menu; + DesktopData *d = data; + GList *it; + gint i; + + menu_clear_entries(menu); + + for (it = focus_order[d->desktop], i = 0; it; it = g_list_next(it), ++i) { + ObClient *c = it->data; + if (client_normal(c)) { + GSList *acts; + ObAction* act; + ObMenuEntry *e; + ObClientIcon *icon; + + act = action_from_string("activate"); + act->data.activate.c = c; + acts = g_slist_prepend(NULL, act); + e = menu_add_normal(menu, i, + (c->iconic ? c->icon_title : c->title), acts); + + if ((icon = client_icon(c, 32, 32))) { + e->data.normal.icon_width = icon->width; + e->data.normal.icon_height = icon->height; + e->data.normal.icon_data = icon->data; + } + } + } + +} + +/* executes it without changing the client in the actions, since we set that + when we make the actions! */ +static void desk_menu_execute(ObMenuEntry *self, gpointer data) +{ + GSList *it; + + for (it = self->data.normal.actions; it; it = g_slist_next(it)) + { + ObAction *act = it->data; + act->func(&act->data); + } +} + +static void desk_menu_destroy(ObMenu *menu, gpointer data) +{ + DesktopData *d = data; + + g_free(d); +} + +static void self_update(ObMenuFrame *frame, gpointer data) +{ + ObMenu *menu = frame->menu; + guint i; + GSList *it, *next; + + it = desktop_menus; + for (i = 0; i < screen_num_desktops; ++i) { + if (!it) { + ObMenu *submenu; + gchar *name = g_strdup_printf("%s-%u", MENU_NAME, i); + DesktopData *data = g_new(DesktopData, 1); + + data->desktop = i; + submenu = menu_new(name, screen_desktop_names[i], data); + menu_set_update_func(submenu, desk_menu_update); + menu_set_execute_func(submenu, desk_menu_execute); + menu_set_destroy_func(submenu, desk_menu_destroy); + + menu_add_submenu(menu, i, name); + + g_free(name); + + desktop_menus = g_slist_append(desktop_menus, submenu); + } else + it = g_slist_next(it); + } + for (; it; it = next, ++i) { + next = g_slist_next(it); + menu_free(it->data); + desktop_menus = g_slist_delete_link(desktop_menus, it); + menu_entry_remove(menu_find_entry_id(menu, i)); + } +} + +void client_list_menu_startup() +{ + ObMenu *menu; + + menu = menu_new(MENU_NAME, _("Desktops"), NULL); + menu_set_update_func(menu, self_update); +} diff --git a/openbox/client_list_menu.h b/openbox/client_list_menu.h new file mode 100644 index 00000000..f8d4ce1e --- /dev/null +++ b/openbox/client_list_menu.h @@ -0,0 +1,6 @@ +#ifndef ob__client_list_menu_h +#define ob__client_list_menu_h + +void client_list_menu_startup(); + +#endif diff --git a/openbox/client_menu.c b/openbox/client_menu.c new file mode 100644 index 00000000..bd57f06d --- /dev/null +++ b/openbox/client_menu.c @@ -0,0 +1,196 @@ +#include "kernel/debug.h" +#include "kernel/menu.h" +#include "kernel/menuframe.h" +#include "kernel/screen.h" +#include "kernel/client.h" +#include "kernel/openbox.h" +#include "kernel/frame.h" +#include "gettext.h" + +#include + +#define CLIENT_MENU_NAME "client-menu" +#define SEND_TO_MENU_NAME "client-send-to-menu" +#define LAYER_MENU_NAME "client-layer-menu" + +enum { + LAYER_TOP, + LAYER_NORMAL, + LAYER_BOTTOM +}; + +enum { + CLIENT_SEND_TO, + CLIENT_LAYER, + CLIENT_ICONIFY, + CLIENT_MAXIMIZE, + CLIENT_RAISE, + CLIENT_LOWER, + CLIENT_SHADE, + CLIENT_DECORATE, + CLIENT_MOVE, + CLIENT_RESIZE, + CLIENT_CLOSE +}; + +static void client_update(ObMenuFrame *frame, gpointer data) +{ + ObMenu *menu = frame->menu; + ObMenuEntry *e; + GList *it; + + frame->show_title = FALSE; + + for (it = menu->entries; it; it = g_list_next(it)) { + e = it->data; + if (e->type == OB_MENU_ENTRY_TYPE_NORMAL) + e->data.normal.enabled = !!frame->client; + } + + if (!frame->client) + return; + + e = menu_find_entry_id(menu, CLIENT_ICONIFY); + e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_ICONIFY; + + e = menu_find_entry_id(menu, CLIENT_MAXIMIZE); + e->data.normal.enabled =frame->client->functions & OB_CLIENT_FUNC_MAXIMIZE; + + e = menu_find_entry_id(menu, CLIENT_SHADE); + e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_SHADE; + + e = menu_find_entry_id(menu, CLIENT_MOVE); + e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_MOVE; + + e = menu_find_entry_id(menu, CLIENT_RESIZE); + e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_RESIZE; + + e = menu_find_entry_id(menu, CLIENT_CLOSE); + e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_CLOSE; +} + +static void layer_update(ObMenuFrame *frame, gpointer data) +{ + ObMenu *menu = frame->menu; + ObMenuEntry *e; + GList *it; + + for (it = menu->entries; it; it = g_list_next(it)) { + e = it->data; + if (e->type == OB_MENU_ENTRY_TYPE_NORMAL) + e->data.normal.enabled = !!frame->client; + } + + if (!frame->client) + return; + + e = menu_find_entry_id(menu, LAYER_TOP); + e->data.normal.enabled = !frame->client->above; + + e = menu_find_entry_id(menu, LAYER_NORMAL); + e->data.normal.enabled = (frame->client->above || frame->client->below); + + e = menu_find_entry_id(menu, LAYER_BOTTOM); + e->data.normal.enabled = !frame->client->below; +} + +static void send_to_update(ObMenuFrame *frame, gpointer data) +{ + ObMenu *menu = frame->menu; + guint i; + GSList *acts; + ObAction *act; + + menu_clear_entries(menu); + + if (!frame->client) + return; + + for (i = 0; i <= screen_num_desktops; ++i) { + gchar *name; + guint desk; + + if (i >= screen_num_desktops) { + menu_add_separator(menu, -1); + + desk = DESKTOP_ALL; + name = _("All desktops"); + } else { + desk = i; + name = screen_desktop_names[i]; + } + + act = action_from_string("SendToDesktop"); + act->data.sendto.desk = desk; + act->data.sendto.follow = FALSE; + acts = g_slist_prepend(NULL, act); + menu_add_normal(menu, desk, name, acts); + + if (frame->client->desktop == desk) { + ObMenuEntry *e = menu_find_entry_id(menu, desk); + g_assert(e); + e->data.normal.enabled = FALSE; + } + } +} + +void client_menu_startup() +{ + GSList *acts; + ObMenu *menu; + + menu = menu_new(LAYER_MENU_NAME, _("Layer"), NULL); + menu_set_update_func(menu, layer_update); + + acts = g_slist_prepend(NULL, action_from_string("SendToTopLayer")); + menu_add_normal(menu, LAYER_TOP, _("Always on top"), acts); + + acts = g_slist_prepend(NULL, action_from_string("SendToNormalLayer")); + menu_add_normal(menu, LAYER_NORMAL, _("Normal"), acts); + + acts = g_slist_prepend(NULL, action_from_string("SendToBottomLayer")); + menu_add_normal(menu, LAYER_BOTTOM, _("Always on bottom"),acts); + + + menu = menu_new(SEND_TO_MENU_NAME, _("Send to desktop"), NULL); + menu_set_update_func(menu, send_to_update); + + + menu = menu_new(CLIENT_MENU_NAME, _("Client menu"), NULL); + menu_set_update_func(menu, client_update); + + menu_add_submenu(menu, CLIENT_SEND_TO, SEND_TO_MENU_NAME); + + menu_add_submenu(menu, CLIENT_LAYER, LAYER_MENU_NAME); + + acts = g_slist_prepend(NULL, action_from_string("Iconify")); + menu_add_normal(menu, CLIENT_ICONIFY, _("Iconify"), acts); + + acts = g_slist_prepend(NULL, action_from_string("ToggleMaximizeFull")); + menu_add_normal(menu, CLIENT_MAXIMIZE, _("Maximize"), acts); + + acts = g_slist_prepend(NULL, action_from_string("Raise")); + menu_add_normal(menu, CLIENT_RAISE, _("Raise to top"), acts); + + acts = g_slist_prepend(NULL, action_from_string("Lower")); + menu_add_normal(menu, CLIENT_LOWER, _("Lower to bottom"),acts); + + acts = g_slist_prepend(NULL, action_from_string("ToggleShade")); + menu_add_normal(menu, CLIENT_SHADE, _("Roll up/down"), acts); + + acts = g_slist_prepend(NULL, action_from_string("ToggleDecorations")); + menu_add_normal(menu, CLIENT_DECORATE, _("Decorate"), acts); + + menu_add_separator(menu, -1); + + acts = g_slist_prepend(NULL, action_from_string("KeyboardMove")); + menu_add_normal(menu, CLIENT_MOVE, _("Move"), acts); + + acts = g_slist_prepend(NULL, action_from_string("KeyboardResize")); + menu_add_normal(menu, CLIENT_RESIZE, _("Resize"), acts); + + menu_add_separator(menu, -1); + + acts = g_slist_prepend(NULL, action_from_string("Close")); + menu_add_normal(menu, CLIENT_CLOSE, _("Close"), acts); +} diff --git a/openbox/client_menu.h b/openbox/client_menu.h new file mode 100644 index 00000000..42be1396 --- /dev/null +++ b/openbox/client_menu.h @@ -0,0 +1,6 @@ +#ifndef ob__client_menu_h +#define ob__client_menu_h + +void client_menu_startup(); + +#endif diff --git a/plugins/menu/client_list_menu.c b/plugins/menu/client_list_menu.c deleted file mode 100644 index 5b9637bf..00000000 --- a/plugins/menu/client_list_menu.c +++ /dev/null @@ -1,132 +0,0 @@ -#include "kernel/openbox.h" -#include "kernel/menu.h" -#include "kernel/menuframe.h" -#include "kernel/action.h" -#include "kernel/screen.h" -#include "kernel/client.h" -#include "kernel/focus.h" -#include "gettext.h" - -#include "render/theme.h" - -#include - -#define MENU_NAME "client-list-menu" - -typedef struct { - /* how many desktop menus we've made */ - guint desktops; -} MenuData; - -typedef struct { - guint desktop; -} DesktopData; - -void plugin_setup_config() { } - -static void desk_menu_update(ObMenuFrame *frame, gpointer data) -{ - ObMenu *menu = frame->menu; - DesktopData *d = data; - GList *it; - gint i; - - menu_clear_entries(menu->name); - - for (it = focus_order[d->desktop], i = 0; it; it = g_list_next(it), ++i) { - ObClient *c = it->data; - if (client_normal(c)) { - GSList *acts; - ObAction* act; - ObMenuEntry *e; - ObClientIcon *icon; - - act = action_from_string("activate"); - act->data.activate.c = c; - acts = g_slist_prepend(NULL, act); - e = menu_add_normal(menu->name, i, - (c->iconic ? c->icon_title : c->title), acts); - - if ((icon = client_icon(c, 32, 32))) { - e->data.normal.icon_width = icon->width; - e->data.normal.icon_height = icon->height; - e->data.normal.icon_data = icon->data; - } - } - } - -} - -/* executes it without changing the client in the actions, since we set that - when we make the actions! */ -static void desk_menu_execute(ObMenuEntry *self, gpointer data) -{ - GSList *it; - - for (it = self->data.normal.actions; it; it = g_slist_next(it)) - { - ObAction *act = it->data; - act->func(&act->data); - } -} - -static void desk_menu_destroy(ObMenu *menu, gpointer data) -{ - DesktopData *d = data; - - g_free(d); -} - -static void self_update(ObMenuFrame *frame, gpointer data) -{ - guint i; - MenuData *d = data; - - menu_clear_entries(MENU_NAME); - - for (i = 0; i < screen_num_desktops; ++i) { - gchar *name = g_strdup_printf("%s-%u", MENU_NAME, i); - DesktopData *data = g_new(DesktopData, 1); - - data->desktop = i; - menu_new(name, screen_desktop_names[i], data); - menu_set_update_func(name, desk_menu_update); - menu_set_execute_func(name, desk_menu_execute); - menu_set_destroy_func(name, desk_menu_destroy); - - menu_add_submenu(MENU_NAME, 0, name); - - g_free(name); - } - - d->desktops = MAX(d->desktops, screen_num_desktops); -} - -static void self_destroy(ObMenu *menu, gpointer data) -{ - MenuData *d = data; - guint i; - - for (i = 0; i < d->desktops; ++i) { - gchar *name = g_strdup_printf("%s-%u", MENU_NAME, i); - menu_free(name); - g_free(name); - } - g_free(d); -} - -void plugin_startup() -{ - MenuData *data; - - data = g_new(MenuData, 1); - data->desktops = 0; - menu_new(MENU_NAME, _("Desktops"), data); - menu_set_update_func(MENU_NAME, self_update); - menu_set_destroy_func(MENU_NAME, self_destroy); -} - -void plugin_shutdown() -{ - menu_free(MENU_NAME); -} diff --git a/plugins/menu/client_menu.c b/plugins/menu/client_menu.c deleted file mode 100644 index 0c2167c3..00000000 --- a/plugins/menu/client_menu.c +++ /dev/null @@ -1,204 +0,0 @@ -#include "kernel/debug.h" -#include "kernel/menu.h" -#include "kernel/menuframe.h" -#include "kernel/screen.h" -#include "kernel/client.h" -#include "kernel/openbox.h" -#include "kernel/frame.h" -#include "gettext.h" - -#include - -#define CLIENT_MENU_NAME "client-menu" -#define SEND_TO_MENU_NAME "client-send-to-menu" -#define LAYER_MENU_NAME "client-layer-menu" - -enum { - LAYER_TOP, - LAYER_NORMAL, - LAYER_BOTTOM -}; - -enum { - CLIENT_SEND_TO, - CLIENT_LAYER, - CLIENT_ICONIFY, - CLIENT_MAXIMIZE, - CLIENT_RAISE, - CLIENT_LOWER, - CLIENT_SHADE, - CLIENT_DECORATE, - CLIENT_MOVE, - CLIENT_RESIZE, - CLIENT_CLOSE -}; - -void plugin_setup_config() { } - -static void client_update(ObMenuFrame *frame, gpointer data) -{ - ObMenu *menu = frame->menu; - ObMenuEntry *e; - GList *it; - - frame->show_title = FALSE; - - for (it = menu->entries; it; it = g_list_next(it)) { - e = it->data; - if (e->type == OB_MENU_ENTRY_TYPE_NORMAL) - e->data.normal.enabled = !!frame->client; - } - - if (!frame->client) - return; - - e = menu_find_entry_id(menu, CLIENT_ICONIFY); - e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_ICONIFY; - - e = menu_find_entry_id(menu, CLIENT_MAXIMIZE); - e->data.normal.enabled =frame->client->functions & OB_CLIENT_FUNC_MAXIMIZE; - - e = menu_find_entry_id(menu, CLIENT_SHADE); - e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_SHADE; - - e = menu_find_entry_id(menu, CLIENT_MOVE); - e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_MOVE; - - e = menu_find_entry_id(menu, CLIENT_RESIZE); - e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_RESIZE; - - e = menu_find_entry_id(menu, CLIENT_CLOSE); - e->data.normal.enabled = frame->client->functions & OB_CLIENT_FUNC_CLOSE; -} - -static void layer_update(ObMenuFrame *frame, gpointer data) -{ - ObMenu *menu = frame->menu; - ObMenuEntry *e; - GList *it; - - for (it = menu->entries; it; it = g_list_next(it)) { - e = it->data; - if (e->type == OB_MENU_ENTRY_TYPE_NORMAL) - e->data.normal.enabled = !!frame->client; - } - - if (!frame->client) - return; - - e = menu_find_entry_id(menu, LAYER_TOP); - e->data.normal.enabled = !frame->client->above; - - e = menu_find_entry_id(menu, LAYER_NORMAL); - e->data.normal.enabled = (frame->client->above || frame->client->below); - - e = menu_find_entry_id(menu, LAYER_BOTTOM); - e->data.normal.enabled = !frame->client->below; -} - -static void send_to_update(ObMenuFrame *frame, gpointer data) -{ - ObMenu *menu = frame->menu; - guint i; - GSList *acts; - ObAction *act; - - menu_clear_entries(SEND_TO_MENU_NAME); - - if (!frame->client) - return; - - for (i = 0; i <= screen_num_desktops; ++i) { - gchar *name; - guint desk; - - if (i >= screen_num_desktops) { - menu_add_separator(CLIENT_MENU_NAME, -1); - - desk = DESKTOP_ALL; - name = _("All desktops"); - } else { - desk = i; - name = screen_desktop_names[i]; - } - - act = action_from_string("SendToDesktop"); - act->data.sendto.desk = desk; - act->data.sendto.follow = FALSE; - acts = g_slist_prepend(NULL, act); - menu_add_normal(SEND_TO_MENU_NAME, desk, name, acts); - - if (frame->client->desktop == desk) { - ObMenuEntry *e = menu_find_entry_id(menu, desk); - g_assert(e); - e->data.normal.enabled = FALSE; - } - } -} - -void plugin_startup() -{ - GSList *acts; - - menu_new(LAYER_MENU_NAME, _("Layer"), NULL); - menu_set_update_func(LAYER_MENU_NAME, layer_update); - - acts = g_slist_prepend(NULL, action_from_string("SendToTopLayer")); - menu_add_normal(LAYER_MENU_NAME, LAYER_TOP, _("Always on top"), acts); - - acts = g_slist_prepend(NULL, action_from_string("SendToNormalLayer")); - menu_add_normal(LAYER_MENU_NAME, LAYER_NORMAL, _("Normal"), acts); - - acts = g_slist_prepend(NULL, action_from_string("SendToBottomLayer")); - menu_add_normal(LAYER_MENU_NAME, LAYER_BOTTOM, _("Always on bottom"),acts); - - - menu_new(SEND_TO_MENU_NAME, _("Send to desktop"), NULL); - menu_set_update_func(SEND_TO_MENU_NAME, send_to_update); - - - menu_new(CLIENT_MENU_NAME, _("Client menu"), NULL); - menu_set_update_func(CLIENT_MENU_NAME, client_update); - - menu_add_submenu(CLIENT_MENU_NAME, CLIENT_SEND_TO, SEND_TO_MENU_NAME); - - menu_add_submenu(CLIENT_MENU_NAME, CLIENT_LAYER, LAYER_MENU_NAME); - - acts = g_slist_prepend(NULL, action_from_string("Iconify")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_ICONIFY, _("Iconify"), acts); - - acts = g_slist_prepend(NULL, action_from_string("ToggleMaximizeFull")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_MAXIMIZE, _("Maximize"), acts); - - acts = g_slist_prepend(NULL, action_from_string("Raise")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_RAISE, _("Raise to top"), acts); - - acts = g_slist_prepend(NULL, action_from_string("Lower")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_LOWER, _("Lower to bottom"),acts); - - acts = g_slist_prepend(NULL, action_from_string("ToggleShade")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_SHADE, _("Roll up/down"), acts); - - acts = g_slist_prepend(NULL, action_from_string("ToggleDecorations")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_DECORATE, _("Decorate"), acts); - - menu_add_separator(CLIENT_MENU_NAME, -1); - - acts = g_slist_prepend(NULL, action_from_string("KeyboardMove")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_MOVE, _("Move"), acts); - - acts = g_slist_prepend(NULL, action_from_string("KeyboardResize")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_RESIZE, _("Resize"), acts); - - menu_add_separator(CLIENT_MENU_NAME, -1); - - acts = g_slist_prepend(NULL, action_from_string("Close")); - menu_add_normal(CLIENT_MENU_NAME, CLIENT_CLOSE, _("Close"), acts); -} - -void plugin_shutdown() -{ - menu_free(LAYER_MENU_NAME); - menu_free(SEND_TO_MENU_NAME); - menu_free(CLIENT_MENU_NAME); -} -- cgit v1.2.3