summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/debug.c25
-rw-r--r--openbox/debug.h11
-rw-r--r--openbox/event.c64
-rw-r--r--openbox/focus.c20
-rw-r--r--openbox/openbox.c3
-rw-r--r--openbox/screen.c2
6 files changed, 79 insertions, 46 deletions
diff --git a/openbox/debug.c b/openbox/debug.c
index 102c8891..af22c69f 100644
--- a/openbox/debug.c
+++ b/openbox/debug.c
@@ -1,7 +1,7 @@
/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
debug.c for the Openbox window manager
- Copyright (c) 2003 Ben Jansens
+ Copyright (c) 2003-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
@@ -16,6 +16,8 @@
See the COPYING file for a copy of the GNU General Public License.
*/
+#include "debug.h"
+
#include <glib.h>
#include <stdlib.h>
#include <stdarg.h>
@@ -38,3 +40,24 @@ void ob_debug(const gchar *a, ...)
va_end(vl);
}
}
+
+static gboolean enabled_types[OB_DEBUG_TYPE_NUM] = {FALSE};
+
+void ob_debug_enable(ObDebugType type, gboolean enable)
+{
+ g_assert(type < OB_DEBUG_TYPE_NUM);
+ enabled_types[type] = enable;
+}
+
+void ob_debug_type(ObDebugType type, const gchar *a, ...)
+{
+ va_list vl;
+
+ g_assert(type < OB_DEBUG_TYPE_NUM);
+
+ if (show && enabled_types[type]) {
+ va_start(vl, a);
+ vfprintf(stderr, a, vl);
+ va_end(vl);
+ }
+}
diff --git a/openbox/debug.h b/openbox/debug.h
index fea52c06..2b907ebf 100644
--- a/openbox/debug.h
+++ b/openbox/debug.h
@@ -1,7 +1,7 @@
/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
debug.h for the Openbox window manager
- Copyright (c) 2003 Ben Jansens
+ Copyright (c) 2003-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
@@ -25,4 +25,13 @@ void ob_debug_show_output(gboolean enable);
void ob_debug(const gchar *a, ...);
+typedef enum {
+ OB_DEBUG_FOCUS,
+ OB_DEBUG_TYPE_NUM
+} ObDebugType;
+
+void ob_debug_type(ObDebugType type, const gchar *a, ...);
+
+void ob_debug_enable(ObDebugType type, gboolean enable);
+
#endif
diff --git a/openbox/event.c b/openbox/event.c
index a2f0ef6a..b9f04e4d 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -440,27 +440,28 @@ static void event_process(const XEvent *ec, gpointer data)
}
}
-#if 1 /* focus debugging stuff */
if (e->type == FocusIn || e->type == FocusOut) {
gint mode = e->xfocus.mode;
gint detail = e->xfocus.detail;
Window window = e->xfocus.window;
if (detail == NotifyVirtual) {
- ob_debug("FOCUS %s NOTIFY VIRTUAL window 0x%x\n",
- (e->type == FocusIn ? "IN" : "OUT"), window);
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "FOCUS %s NOTIFY VIRTUAL window 0x%x\n",
+ (e->type == FocusIn ? "IN" : "OUT"), window);
}
else if (detail == NotifyNonlinearVirtual) {
- ob_debug("FOCUS %s NOTIFY NONLINVIRTUAL window 0x%x\n",
- (e->type == FocusIn ? "IN" : "OUT"), window);
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "FOCUS %s NOTIFY NONLINVIRTUAL window 0x%x\n",
+ (e->type == FocusIn ? "IN" : "OUT"), window);
}
else
- ob_debug("UNKNOWN FOCUS %s (d %d, m %d) window 0x%x\n",
- (e->type == FocusIn ? "IN" : "OUT"),
- detail, mode, window);
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "UNKNOWN FOCUS %s (d %d, m %d) window 0x%x\n",
+ (e->type == FocusIn ? "IN" : "OUT"),
+ detail, mode, window);
}
-#endif
event_set_curtime(e);
event_hack_mods(e);
@@ -678,18 +679,18 @@ static void event_handle_client(ObClient *client, XEvent *e)
if (!XCheckIfEvent(ob_display, &ce, look_for_focusin, NULL)) {
/* There is no FocusIn, this means focus went to a window that
is not being managed, or a window on another screen. */
- ob_debug("Focus went to a black hole !\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "Focus went to a black hole !\n");
} else if (ce.xany.window == e->xany.window) {
/* If focus didn't actually move anywhere, there is nothing to do*/
break;
} else if (ce.xfocus.detail == NotifyPointerRoot ||
ce.xfocus.detail == NotifyDetailNone) {
- ob_debug("Focus went to root\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "Focus went to root\n");
/* Focus has been reverted to the root window or nothing, so fall
back to something other than the window which just had it. */
focus_fallback(FALSE);
} else if (ce.xfocus.detail == NotifyInferior) {
- ob_debug("Focus went to parent\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "Focus went to parent\n");
/* Focus has been reverted to parent, which is our frame window,
or the root window, so fall back to something other than the
window which had it. */
@@ -701,8 +702,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
if (ed.ignored) {
/* The FocusIn was ignored, this means it was on a window
that isn't a client. */
- ob_debug("Focus went to an unmanaged window 0x%x !\n",
- ce.xfocus.window);
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "Focus went to an unmanaged window 0x%x !\n",
+ ce.xfocus.window);
focus_fallback(TRUE);
}
}
@@ -780,21 +782,19 @@ static void event_handle_client(ObClient *client, XEvent *e)
if (e->xcrossing.mode == NotifyGrab ||
e->xcrossing.mode == NotifyUngrab)
{
-#ifdef DEBUG_FOCUS
- ob_debug("%sNotify mode %d detail %d on %lx IGNORED\n",
- (e->type == EnterNotify ? "Enter" : "Leave"),
- e->xcrossing.mode,
- e->xcrossing.detail, client?client->window:0);
-#endif
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "%sNotify mode %d detail %d on %lx IGNORED\n",
+ (e->type == EnterNotify ? "Enter" : "Leave"),
+ e->xcrossing.mode,
+ e->xcrossing.detail, client?client->window:0);
} else {
-#ifdef DEBUG_FOCUS
- ob_debug("%sNotify mode %d detail %d on %lx, "
- "focusing window: %d\n",
- (e->type == EnterNotify ? "Enter" : "Leave"),
- e->xcrossing.mode,
- e->xcrossing.detail, (client?client->window:0),
- !nofocus);
-#endif
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "%sNotify mode %d detail %d on %lx, "
+ "focusing window: %d\n",
+ (e->type == EnterNotify ? "Enter" : "Leave"),
+ e->xcrossing.mode,
+ e->xcrossing.detail, (client?client->window:0),
+ !nofocus);
if (!nofocus && config_focus_follow)
event_enter_client(client);
}
@@ -910,14 +910,14 @@ static void event_handle_client(ObClient *client, XEvent *e)
}
break;
case UnmapNotify:
- ob_debug("UnmapNotify for window 0x%x eventwin 0x%x sendevent %d "
- "ignores left %d\n",
- client->window, e->xunmap.event, e->xunmap.from_configure,
- client->ignore_unmaps);
if (client->ignore_unmaps) {
client->ignore_unmaps--;
break;
}
+ ob_debug("UnmapNotify for window 0x%x eventwin 0x%x sendevent %d "
+ "ignores left %d\n",
+ client->window, e->xunmap.event, e->xunmap.from_configure,
+ client->ignore_unmaps);
client_unmanage(client);
break;
case DestroyNotify:
diff --git a/openbox/focus.c b/openbox/focus.c
index 1e343dfa..197948e9 100644
--- a/openbox/focus.c
+++ b/openbox/focus.c
@@ -158,18 +158,16 @@ void focus_set_client(ObClient *client)
Window active;
ObClient *old;
-#ifdef DEBUG_FOCUS
- ob_debug("focus_set_client 0x%lx\n", client ? client->window : 0);
-#endif
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "focus_set_client 0x%lx\n", client ? client->window : 0);
/* uninstall the old colormap, and install the new one */
screen_install_colormap(focus_client, FALSE);
screen_install_colormap(client, TRUE);
if (client == NULL) {
-#ifdef DEBUG_FOCUS
- ob_debug("actively focusing NONWINDOW\n");
-#endif
+ ob_debug_type(OB_DEBUG_FOCUS, "actively focusing NONWINDOW\n");
+
/* when nothing will be focused, send focus to the backup target */
XSetInputFocus(ob_display, screen_support_win, RevertToNone,
event_curtime);
@@ -207,13 +205,13 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
ObClient *target = NULL;
ObClient *desktop = NULL;
- ob_debug("trying pointer stuff\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "trying pointer stuff\n");
if (config_focus_follow && !config_focus_last)
{
if ((target = client_under_pointer()))
if (allow_refocus || target != old)
if (client_normal(target) && client_can_focus(target)) {
- ob_debug("found in pointer stuff\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "found in pointer stuff\n");
return target;
}
}
@@ -232,12 +230,12 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
}
#endif
- ob_debug("trying omnipresentness\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "trying omnipresentness\n");
if (allow_refocus && old && old->desktop == DESKTOP_ALL)
return old;
- ob_debug("trying the focus order\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "trying the focus order\n");
for (it = focus_order; it; it = g_list_next(it))
if (allow_refocus || it->data != old) {
ObClient *c = it->data;
@@ -257,7 +255,7 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
!c->iconic)
{
if (client_normal(c)) {
- ob_debug("found in focus order\n");
+ ob_debug_type(OB_DEBUG_FOCUS, "found in focus order\n");
return it->data;
} else if (c->type == OB_CLIENT_TYPE_DESKTOP && !desktop)
desktop = c;
diff --git a/openbox/openbox.c b/openbox/openbox.c
index 5c4905ee..08360d45 100644
--- a/openbox/openbox.c
+++ b/openbox/openbox.c
@@ -100,6 +100,9 @@ gint main(gint argc, gchar **argv)
{
#ifdef DEBUG
ob_debug_show_output(TRUE);
+#ifdef DEBUG_FOCUS
+ ob_debug_enable(OB_DEBUG_FOCUS, TRUE);
+#endif
#endif
state = OB_STATE_STARTING;
diff --git a/openbox/screen.c b/openbox/screen.c
index 1705fa89..5f0ef0e7 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -166,7 +166,7 @@ gboolean screen_annex()
CopyFromParent, InputOutput,
CopyFromParent,
CWOverrideRedirect, &attrib);
- XMapRaised(ob_display, screen_support_win);
+ XMapWindow(ob_display, screen_support_win);
if (!replace_wm()) {
XDestroyWindow(ob_display, screen_support_win);