summaryrefslogtreecommitdiff
path: root/openbox/hooks.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2008-03-01 00:04:28 -0500
committerDana Jansens <danakj@orodu.net>2008-03-01 00:04:28 -0500
commitdc2e6f6bf7143a56de360a393b33906735e63625 (patch)
tree71cb301bd193a867107b14b39b4a39c2860e6945 /openbox/hooks.c
parent985e7dadf9a3ebf4bd265d955c3198e96405e5d2 (diff)
Get hooks working
Diffstat (limited to 'openbox/hooks.c')
-rw-r--r--openbox/hooks.c68
1 files changed, 32 insertions, 36 deletions
diff --git a/openbox/hooks.c b/openbox/hooks.c
index 2a346c39..ea461925 100644
--- a/openbox/hooks.c
+++ b/openbox/hooks.c
@@ -1,9 +1,13 @@
#include "hooks.h"
#include "actions.h"
+#include "client.h"
+#include "focus.h"
+#include "debug.h"
#include <glib.h>
static GSList *hooks[OB_NUM_HOOKS];
+static const gchar *names[OB_NUM_HOOKS];
void hooks_startup(gboolean reconfig)
{
@@ -11,6 +15,23 @@ void hooks_startup(gboolean reconfig)
for (i = 0; i < OB_NUM_HOOKS; ++i)
hooks[i] = NULL;
+
+ names[OB_HOOK_WIN_NEW] = "WindowNew";
+ names[OB_HOOK_WIN_CLOSE] = "WindowClosed";
+ names[OB_HOOK_WIN_VISIBLE] = "WindowVisible";
+ names[OB_HOOK_WIN_INVISIBLE] = "WindowInvisible";
+ names[OB_HOOK_WIN_ICONIC] = "WindowIconified";
+ names[OB_HOOK_WIN_UNICONIC] = "WindowUniconified";
+ names[OB_HOOK_WIN_MAX] = "WindowMaximized";
+ names[OB_HOOK_WIN_UNMAX] = "WindowUnmaximized";
+ names[OB_HOOK_WIN_SHADE] = "WindowShaded";
+ names[OB_HOOK_WIN_UNSHADE] = "WindowUnshaded";
+ names[OB_HOOK_WIN_FOCUS] = "WindowFocused";
+ names[OB_HOOK_WIN_UNFOCUS] = "WindowUnfocused";
+ names[OB_HOOK_WIN_DESK_CHANGE] = "WindowOnNewDesktop";
+ names[OB_HOOK_WIN_DECORATED] = "WindowDecorated";
+ names[OB_HOOK_WIN_UNDECORATED] = "WindowUndecorated";
+ names[OB_HOOK_SCREEN_DESK_CHANGE] = "DesktopChanged";
}
void hooks_shutdown(gboolean reconfig)
@@ -26,57 +47,32 @@ void hooks_shutdown(gboolean reconfig)
ObHook hooks_hook_from_name(const gchar *n)
{
- if (!g_ascii_strcasecmp(n, "WindowNew"))
- return OB_HOOK_WIN_NEW;
- if (!g_ascii_strcasecmp(n, "WindowClosed"))
- return OB_HOOK_WIN_CLOSE;
- if (!g_ascii_strcasecmp(n, "WindowVisible"))
- return OB_HOOK_WIN_VISIBLE;
- if (!g_ascii_strcasecmp(n, "WindowInvisible"))
- return OB_HOOK_WIN_INVISIBLE;
- if (!g_ascii_strcasecmp(n, "WindowIconified"))
- return OB_HOOK_WIN_ICONIC;
- if (!g_ascii_strcasecmp(n, "WindowUniconified"))
- return OB_HOOK_WIN_UNICONIC;
- if (!g_ascii_strcasecmp(n, "WindowMaximized"))
- return OB_HOOK_WIN_MAX;
- if (!g_ascii_strcasecmp(n, "WindowUnmaximized"))
- return OB_HOOK_WIN_UNMAX;
- if (!g_ascii_strcasecmp(n, "WindowShaded"))
- return OB_HOOK_WIN_SHADE;
- if (!g_ascii_strcasecmp(n, "WindowUnshaded"))
- return OB_HOOK_WIN_UNSHADE;
- if (!g_ascii_strcasecmp(n, "WindowFocused"))
- return OB_HOOK_WIN_FOCUS;
- if (!g_ascii_strcasecmp(n, "WindowUnfocused"))
- return OB_HOOK_WIN_UNFOCUS;
- if (!g_ascii_strcasecmp(n, "WindowOnNewDesktop"))
- return OB_HOOK_WIN_DESK_CHANGE;
- if (!g_ascii_strcasecmp(n, "WindowDecorated"))
- return OB_HOOK_WIN_DECORATED;
- if (!g_ascii_strcasecmp(n, "WindowUndecorated"))
- return OB_HOOK_WIN_UNDECORATED;
- if (!g_ascii_strcasecmp(n, "DesktopChanged"))
- return OB_HOOK_SCREEN_DESK_CHANGE;
+ gint i;
+
+ for (i = 1; i < OB_NUM_HOOKS; ++i)
+ if (!g_ascii_strcasecmp(n, names[i]))
+ return (ObHook)i;
return OB_HOOK_INVALID;
}
-void hooks_run(ObHook hook, struct _ObClient *c)
+void hooks_run(ObHook hook, struct _ObClient *client)
{
GSList *it;
- g_assert(hook < OB_NUM_HOOKS);
+ g_assert(hook < OB_NUM_HOOKS && hook > OB_HOOK_INVALID);
+ ob_debug("Running hook %s for client 0x%x", names[hook],
+ (client ? client->window : 0));
actions_run_acts(hooks[hook],
OB_USER_ACTION_HOOK,
0, -1, -1, 0,
OB_FRAME_CONTEXT_NONE,
- c);
+ event_target_client(client));
}
void hooks_add(ObHook hook, struct _ObActionsAct *act)
{
- g_assert(hook < OB_NUM_HOOKS);
+ g_assert(hook < OB_NUM_HOOKS && hook > OB_HOOK_INVALID);
/* append so they are executed in the same order as they appear in the
config file */