all repos — openbox @ e5b94e6072287d39a777a3cedd0f10a66c58a2b5

openbox fork - make it a bit more like ryudo

some first structural stuff for new actions
Dana Jansens danakj@orodu.net
commit

e5b94e6072287d39a777a3cedd0f10a66c58a2b5

parent

e5cc6c82520a0d4828394f5edddded77292f22ce

4 files changed, 116 insertions(+), 14 deletions(-)

jump to
M Makefile.amMakefile.am

@@ -156,6 +156,8 @@ openbox_openbox_SOURCES = \

gettext.h \ openbox/action.c \ openbox/action.h \ + openbox/actions.c \ + openbox/actions.h \ openbox/client.c \ openbox/client.h \ openbox/client_list_menu.c \
A openbox/actions.c

@@ -0,0 +1,88 @@

+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + actions.h for the Openbox window manager + Copyright (c) 2007 Dana Jansens + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + See the COPYING file for a copy of the GNU General Public License. +*/ + +#include "actions.h" + +static void actions_unregister(ObActionsDefinition *def); + +struct _ObActionsDefinition { + gchar *name; + gboolean interactive; + + ObActionsDataParseFunc parse; + ObActionsDataFreeFunc free; + ObActionsRunFunc run; + + gpointer action_data; +}; + +static GSList *registered = NULL; + + +void actions_startup(gboolean reconfig) +{ + if (reconfig) return; + + +} + +void actions_shutdown(gboolean reconfig) +{ + if (reconfig) return; + + /* free all the registered actions */ + while (registered) { + actions_unregister(registered->data); + registered = g_slist_delete_link(registered, registered); + } +} + +gboolean actions_register(const gchar *name, + gboolean interactive, + ObActionsDataSetupFunc setup, + ObActionsDataParseFunc parse, + ObActionsDataFreeFunc free, + ObActionsRunFunc run) +{ + GSList *it; + ObActionsDefinition *def; + + for (it = registered; it; it = g_slist_next(it)) { + def = it->data; + if (!g_ascii_strcasecmp(name, def->name)) /* already registered */ + return FALSE; + } + + def = g_new(ObActionsDefinition, 1); + def->name = g_strdup(name); + def->interactive = interactive; + def->parse = parse; + def->free = free; + def->run = run; + def->action_data = setup(); + return TRUE; +} + +static void actions_unregister(ObActionsDefinition *def) +{ + if (def) { + def->free(def->action_data); + g_free(def->name); + g_free(def); + } +}
M openbox/actions.hopenbox/actions.h

@@ -16,6 +16,17 @@

See the COPYING file for a copy of the GNU General Public License. */ +#include "misc.h" +#include "frame.h" +#include "parser/parse.h" +#include <glib.h> + +typedef struct _ObActionsDefinition ObActionsDefinition; +typedef struct _ObActionsAnyData ObActionsAnyData; +typedef struct _ObActionsGlobalData ObActionsGlobalData; +typedef struct _ObActionsClientData ObActionsClientData; +typedef struct _ObActionsSelectorData ObActionsSelectorData; + typedef enum { OB_ACTION_DONE, OB_ACTION_CANCELLED,

@@ -28,17 +39,16 @@ typedef void (*ObActionsDataParseFunc)(gpointer action_data,

ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); typedef void (*ObActionsDataFreeFunc)(gpointer action_data); -typedef void (*ObActionsRunFunc)(ObActionsAnyData *data); +typedef void (*ObActionsRunFunc)(ObActionsAnyData *data, + gpointer action_data); -struct _ObActionsDefinition { - gchar *name; - gboolean interactive; +/* + The theory goes: - ObActionsDataSetupFunc setup; - ObActionsDataParseFunc parse; - ObActionsDataFreeFunc free; - ObActionsRunFunc run; -}; + 06:10 (@dana) hm i think there are 3 types of actions + 06:10 (@dana) global actions, window actions, and selector actions + 06:11 (@dana) eg show menu/exit, raise/focus, and cycling/directional/expose +*/ struct _ObActionsAnyData { ObUserAction uact;

@@ -48,23 +58,21 @@ gint button;

Time time; ObActionsInteractiveState interactive; - - gpointer action_data; }; struct _ObActionsGlobalData { - ObActionsData any; + ObActionsAnyData any; }; struct _ObActionsClientData { - ObActionsData any; + ObActionsAnyData any; struct _ObClient *c; ObFrameContext context; }; struct _ObActionsSelectorData { - ObActionsData any; + ObActionsAnyData any; GSList *actions; };
M openbox/openbox.copenbox/openbox.c

@@ -28,6 +28,7 @@ #include "client.h"

#include "xerror.h" #include "prop.h" #include "screen.h" +#include "actions.h" #include "startupnotify.h" #include "focus.h" #include "focus_cycle.h"

@@ -241,6 +242,8 @@ i = parse_startup();

/* start up config which sets up with the parser */ config_startup(i); + /* register all the available actions */ + actions_startup(reconfigure); /* parse/load user options */ if (parse_load_rc(NULL, &doc, &node)) {

@@ -373,6 +376,7 @@ focus_shutdown(reconfigure);

sn_shutdown(reconfigure); window_shutdown(reconfigure); event_shutdown(reconfigure); + actions_shutdown(reconfigure); config_shutdown(); modkeys_shutdown(reconfigure); } while (reconfigure);