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 @@
-
-
-
+
@@ -172,9 +170,7 @@
-
-
-
+
@@ -240,14 +236,10 @@
-
-
-
+
-
-
-
+
@@ -313,9 +305,7 @@
-
-
-
+
diff --git a/plugins/menu/client_list_menu.c b/openbox/client_list_menu.c
similarity index 58%
rename from plugins/menu/client_list_menu.c
rename to openbox/client_list_menu.c
index 5b9637bf..cf3b8d5d 100644
--- a/plugins/menu/client_list_menu.c
+++ b/openbox/client_list_menu.c
@@ -7,16 +7,11 @@
#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;
+static GSList *desktop_menus;
typedef struct {
guint desktop;
@@ -31,7 +26,7 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
GList *it;
gint i;
- menu_clear_entries(menu->name);
+ menu_clear_entries(menu);
for (it = focus_order[d->desktop], i = 0; it; it = g_list_next(it), ++i) {
ObClient *c = it->data;
@@ -44,7 +39,7 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
act = action_from_string("activate");
act->data.activate.c = c;
acts = g_slist_prepend(NULL, act);
- e = menu_add_normal(menu->name, i,
+ e = menu_add_normal(menu, i,
(c->iconic ? c->icon_title : c->title), acts);
if ((icon = client_icon(c, 32, 32))) {
@@ -79,54 +74,43 @@ static void desk_menu_destroy(ObMenu *menu, gpointer data)
static void self_update(ObMenuFrame *frame, gpointer data)
{
+ ObMenu *menu = frame->menu;
guint i;
- MenuData *d = data;
+ GSList *it, *next;
- menu_clear_entries(MENU_NAME);
-
+ it = desktop_menus;
for (i = 0; i < screen_num_desktops; ++i) {
- gchar *name = g_strdup_printf("%s-%u", MENU_NAME, i);
- DesktopData *data = g_new(DesktopData, 1);
+ if (!it) {
+ ObMenu *submenu;
+ 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);
+ 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_NAME, 0, name);
+ menu_add_submenu(menu, i, name);
- g_free(name);
+ g_free(name);
+
+ desktop_menus = g_slist_append(desktop_menus, submenu);
+ } else
+ it = g_slist_next(it);
}
-
- 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);
+ 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));
}
- g_free(d);
}
-void plugin_startup()
+void client_list_menu_startup()
{
- MenuData *data;
+ ObMenu *menu;
- 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);
+ 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/plugins/menu/client_menu.c b/openbox/client_menu.c
similarity index 69%
rename from plugins/menu/client_menu.c
rename to openbox/client_menu.c
index 0c2167c3..bd57f06d 100644
--- a/plugins/menu/client_menu.c
+++ b/openbox/client_menu.c
@@ -33,8 +33,6 @@ enum {
CLIENT_CLOSE
};
-void plugin_setup_config() { }
-
static void client_update(ObMenuFrame *frame, gpointer data)
{
ObMenu *menu = frame->menu;
@@ -103,7 +101,7 @@ static void send_to_update(ObMenuFrame *frame, gpointer data)
GSList *acts;
ObAction *act;
- menu_clear_entries(SEND_TO_MENU_NAME);
+ menu_clear_entries(menu);
if (!frame->client)
return;
@@ -113,7 +111,7 @@ static void send_to_update(ObMenuFrame *frame, gpointer data)
guint desk;
if (i >= screen_num_desktops) {
- menu_add_separator(CLIENT_MENU_NAME, -1);
+ menu_add_separator(menu, -1);
desk = DESKTOP_ALL;
name = _("All desktops");
@@ -126,7 +124,7 @@ static void send_to_update(ObMenuFrame *frame, gpointer data)
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);
+ menu_add_normal(menu, desk, name, acts);
if (frame->client->desktop == desk) {
ObMenuEntry *e = menu_find_entry_id(menu, desk);
@@ -136,69 +134,63 @@ static void send_to_update(ObMenuFrame *frame, gpointer data)
}
}
-void plugin_startup()
+void client_menu_startup()
{
GSList *acts;
+ ObMenu *menu;
- menu_new(LAYER_MENU_NAME, _("Layer"), NULL);
- menu_set_update_func(LAYER_MENU_NAME, layer_update);
+ 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(LAYER_MENU_NAME, LAYER_TOP, _("Always on top"), acts);
+ menu_add_normal(menu, 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);
+ menu_add_normal(menu, 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_add_normal(menu, 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 = menu_new(SEND_TO_MENU_NAME, _("Send to desktop"), NULL);
+ menu_set_update_func(menu, send_to_update);
- menu_new(CLIENT_MENU_NAME, _("Client menu"), NULL);
- menu_set_update_func(CLIENT_MENU_NAME, client_update);
+ menu = menu_new(CLIENT_MENU_NAME, _("Client menu"), NULL);
+ menu_set_update_func(menu, client_update);
- menu_add_submenu(CLIENT_MENU_NAME, CLIENT_SEND_TO, SEND_TO_MENU_NAME);
+ menu_add_submenu(menu, CLIENT_SEND_TO, SEND_TO_MENU_NAME);
- menu_add_submenu(CLIENT_MENU_NAME, CLIENT_LAYER, LAYER_MENU_NAME);
+ menu_add_submenu(menu, CLIENT_LAYER, LAYER_MENU_NAME);
acts = g_slist_prepend(NULL, action_from_string("Iconify"));
- menu_add_normal(CLIENT_MENU_NAME, CLIENT_ICONIFY, _("Iconify"), acts);
+ menu_add_normal(menu, CLIENT_ICONIFY, _("Iconify"), acts);
acts = g_slist_prepend(NULL, action_from_string("ToggleMaximizeFull"));
- menu_add_normal(CLIENT_MENU_NAME, CLIENT_MAXIMIZE, _("Maximize"), acts);
+ menu_add_normal(menu, 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);
+ menu_add_normal(menu, 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);
+ menu_add_normal(menu, 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);
+ menu_add_normal(menu, 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_normal(menu, CLIENT_DECORATE, _("Decorate"), acts);
- menu_add_separator(CLIENT_MENU_NAME, -1);
+ menu_add_separator(menu, -1);
acts = g_slist_prepend(NULL, action_from_string("KeyboardMove"));
- menu_add_normal(CLIENT_MENU_NAME, CLIENT_MOVE, _("Move"), acts);
+ menu_add_normal(menu, 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_normal(menu, CLIENT_RESIZE, _("Resize"), acts);
- menu_add_separator(CLIENT_MENU_NAME, -1);
+ menu_add_separator(menu, -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);
+ 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