From: Mikael Magnusson Date: Sat, 8 Mar 2008 16:43:32 +0000 (+0100) Subject: Merge branch 'backport' into work X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=ec328fc04fe6e8d8c3d1ee386d4964963eb2ee17;hp=-c;p=chaz%2Fopenbox Merge branch 'backport' into work Conflicts: obt/keyboard.c openbox/actions/cyclewindows.c openbox/actions/directionalwindows.c openbox/frame.c openbox/openbox.c --- ec328fc04fe6e8d8c3d1ee386d4964963eb2ee17 diff --combined openbox/actions.c index 8f72714e,948ac2c0..1ec53287 --- a/openbox/actions.c +++ b/openbox/actions.c @@@ -58,7 -58,6 +58,6 @@@ struct _ObActionsAct static GSList *registered = NULL; - void actions_startup(gboolean reconfig) { if (reconfig) return; @@@ -159,21 -158,23 +158,21 @@@ ObActionsAct* actions_parse_string(cons if ((act = actions_build_act_from_string(name))) if (act->def->setup) - act->options = act->def->setup(NULL, NULL, NULL); + act->options = act->def->setup(NULL); return act; } -ObActionsAct* actions_parse(ObParseInst *i, - xmlDocPtr doc, - xmlNodePtr node) +ObActionsAct* actions_parse(xmlNodePtr node) { gchar *name; ObActionsAct *act = NULL; - if (parse_attr_string("name", node, &name)) { + if (obt_parse_attr_string(node, "name", &name)) { if ((act = actions_build_act_from_string(name))) /* there is more stuff to parse here */ if (act->def->setup) - act->options = act->def->setup(i, doc, node->xmlChildrenNode); + act->options = act->def->setup(node->children); g_free(name); } diff --combined openbox/actions/cyclewindows.c index 44d87cf6,6fba17ff..5354f087 --- a/openbox/actions/cyclewindows.c +++ b/openbox/actions/cyclewindows.c @@@ -8,21 -8,23 +8,21 @@@ typedef struct { gboolean linear; - gboolean dialog; gboolean dock_windows; gboolean desktop_windows; gboolean all_desktops; gboolean forward; gboolean bar; gboolean raise; + ObFocusCyclePopupMode dialog_mode; GSList *actions; } Options; static gboolean cycling = FALSE; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_forward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_backward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); +static gpointer setup_forward_func(xmlNodePtr node); +static gpointer setup_backward_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); static gboolean i_input_func(guint initial_state, @@@ -41,42 -43,38 +41,42 @@@ void action_cyclewindows_startup(void run_func, i_input_func, i_cancel_func); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - o->dialog = TRUE; o->bar = TRUE; - - if ((n = parse_find_node("linear", node))) - o->linear = parse_bool(doc, n); - if ((n = parse_find_node("dialog", node))) - o->dialog = parse_bool(doc, n); - if ((n = parse_find_node("bar", node))) - o->bar = parse_bool(doc, n); - if ((n = parse_find_node("raise", node))) - o->raise = parse_bool(doc, n); - if ((n = parse_find_node("panels", node))) - o->dock_windows = parse_bool(doc, n); - if ((n = parse_find_node("desktop", node))) - o->desktop_windows = parse_bool(doc, n); - if ((n = parse_find_node("allDesktops", node))) - o->all_desktops = parse_bool(doc, n); - - if ((n = parse_find_node("finalactions", node))) { + o->dialog_mode = OB_FOCUS_CYCLE_POPUP_MODE_LIST; + + if ((n = obt_parse_find_node(node, "linear"))) + o->linear = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "dialog"))) { + if (obt_parse_node_contains(n, "none")) + o->dialog_mode = OB_FOCUS_CYCLE_POPUP_MODE_NONE; + else if (obt_parse_node_contains(n, "icons")) + o->dialog_mode = OB_FOCUS_CYCLE_POPUP_MODE_ICONS; + } + if ((n = obt_parse_find_node(node, "bar"))) + o->bar = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "raise"))) + o->raise = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "panels"))) + o->dock_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "desktop"))) + o->desktop_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "allDesktops"))) + o->all_desktops = obt_parse_node_bool(n); + + if ((n = obt_parse_find_node(node, "finalactions"))) { xmlNodePtr m; - m = parse_find_node("action", n->xmlChildrenNode); + m = obt_parse_find_node(n->children, "action"); while (m) { - ObActionsAct *action = actions_parse(i, doc, m); + ObActionsAct *action = actions_parse(m); - if (action) o->actions = g_slist_prepend(o->actions, action); + if (action) o->actions = g_slist_append(o->actions, action); - m = parse_find_node("action", m->next); + m = obt_parse_find_node(m->next, "action"); } } else { @@@ -91,16 -89,18 +91,16 @@@ return o; } -static gpointer setup_forward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_forward_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->forward = TRUE; return o; } -static gpointer setup_backward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_backward_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->forward = FALSE; return o; } @@@ -129,7 -129,7 +129,7 @@@ static gboolean run_func(ObActionsData o->linear, TRUE, o->bar, - o->dialog, + o->dialog_mode, FALSE, FALSE); cycling = TRUE; @@@ -189,7 -189,7 +189,7 @@@ static void end_cycle(gboolean cancel, o->linear, TRUE, o->bar, - o->dialog, + o->dialog_mode, TRUE, cancel); cycling = FALSE; diff --combined openbox/actions/desktop.c index d5535f6c,bc70748b..e1bd5520 --- a/openbox/actions/desktop.c +++ b/openbox/actions/desktop.c @@@ -26,8 -26,10 +26,8 @@@ typedef struct gboolean follow; } Options; -static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_go_func(xmlNodePtr node); +static gpointer setup_send_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_desktop_startup(void) @@@ -38,7 -40,8 +38,7 @@@ NULL, NULL); } -static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_go_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@@ -50,8 -53,8 +50,8 @@@ /* wrap by default - it's handy! */ o->rel.wrap = TRUE; - if ((n = parse_find_node("to", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "to"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "last")) o->type = LAST; else if (!g_ascii_strcasecmp(s, "next")) { @@@ -91,23 -94,24 +91,23 @@@ g_free(s); } - if ((n = parse_find_node("wrap", node))) - o->rel.wrap = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "wrap"))) + o->rel.wrap = obt_parse_node_bool(n); return o; } -static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_send_func(xmlNodePtr node) { xmlNodePtr n; Options *o; - o = setup_go_func(i, doc, node); + o = setup_go_func(node); o->send = TRUE; o->follow = TRUE; - if ((n = parse_find_node("follow", node))) - o->follow = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "follow"))) + o->follow = obt_parse_node_bool(n); return o; } @@@ -118,8 -122,6 +118,6 @@@ static gboolean run_func(ObActionsData Options *o = options; guint d; - - switch (o->type) { case LAST: d = screen_last_desktop; diff --combined openbox/actions/directionalwindows.c index c5c25c11,d9f24d61..d3633d50 --- a/openbox/actions/directionalwindows.c +++ b/openbox/actions/directionalwindows.c @@@ -20,9 -20,11 +20,9 @@@ typedef struct static gboolean cycling = FALSE; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); +static gpointer setup_cycle_func(xmlNodePtr node); +static gpointer setup_target_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); static gboolean i_input_func(guint initial_state, @@@ -41,7 -43,7 +41,7 @@@ void action_directionalwindows_startup( run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@@ -50,18 -52,18 +50,18 @@@ o->dialog = TRUE; o->bar = TRUE; - if ((n = parse_find_node("dialog", node))) - o->dialog = parse_bool(doc, n); - if ((n = parse_find_node("bar", node))) - o->bar = parse_bool(doc, n); - if ((n = parse_find_node("raise", node))) - o->raise = parse_bool(doc, n); - if ((n = parse_find_node("panels", node))) - o->dock_windows = parse_bool(doc, n); - if ((n = parse_find_node("desktop", node))) - o->desktop_windows = parse_bool(doc, n); - if ((n = parse_find_node("direction", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "dialog"))) + o->dialog = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "bar"))) + o->bar = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "raise"))) + o->raise = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "panels"))) + o->dock_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "desktop"))) + o->desktop_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "direction"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "north") || !g_ascii_strcasecmp(s, "up")) o->direction = OB_DIRECTION_NORTH; @@@ -85,14 -87,14 +85,14 @@@ g_free(s); } - if ((n = parse_find_node("finalactions", node))) { + if ((n = obt_parse_find_node(node, "finalactions"))) { xmlNodePtr m; - m = parse_find_node("action", n->xmlChildrenNode); + m = obt_parse_find_node(n->children, "action"); while (m) { - ObActionsAct *action = actions_parse(i, doc, m); + ObActionsAct *action = actions_parse(m); - if (action) o->actions = g_slist_prepend(o->actions, action); + if (action) o->actions = g_slist_append(o->actions, action); - m = parse_find_node("action", m->next); + m = obt_parse_find_node(m->next, "action"); } } else { @@@ -107,16 -109,18 +107,16 @@@ return o; } -static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_cycle_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->interactive = TRUE; return o; } -static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_target_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->interactive = FALSE; return o; } diff --combined openbox/client.c index a055e632,7062cabd..0ccb343b --- a/openbox/client.c +++ b/openbox/client.c @@@ -21,10 -21,13 +21,10 @@@ #include "debug.h" #include "startupnotify.h" #include "dock.h" -#include "xerror.h" #include "screen.h" #include "moveresize.h" #include "ping.h" #include "place.h" -#include "prop.h" -#include "extensions.h" #include "frame.h" #include "session.h" #include "event.h" @@@ -33,7 -36,6 +33,7 @@@ #include "focus.h" #include "stacking.h" #include "openbox.h" +#include "hooks.h" #include "group.h" #include "config.h" #include "menuframe.h" @@@ -41,8 -43,6 +41,8 @@@ #include "mouse.h" #include "render/render.h" #include "gettext.h" +#include "obt/display.h" +#include "obt/prop.h" #ifdef HAVE_UNISTD_H # include @@@ -108,7 -108,6 +108,6 @@@ static void client_call_notifies(ObClie static void client_ping_event(ObClient *self, gboolean dead); static void client_prompt_kill(ObClient *self); - void client_startup(gboolean reconfig) { if ((client_default_icon = RrImageCacheFind(ob_rr_icons, @@@ -185,8 -184,8 +184,8 @@@ void client_set_list(void } else windows = NULL; - PROP_SETA32(RootWindow(ob_display, ob_screen), - net_client_list, window, (gulong*)windows, size); + OBT_PROP_SETA32(obt_root(ob_screen), NET_CLIENT_LIST, WINDOW, + (gulong*)windows, size); if (windows) g_free(windows); @@@ -194,17 -193,97 +193,17 @@@ stacking_set_list(); } -void client_manage_all(void) -{ - guint i, j, nchild; - Window w, *children; - XWMHints *wmhints; - XWindowAttributes attrib; - - XQueryTree(ob_display, RootWindow(ob_display, ob_screen), - &w, &w, &children, &nchild); - - /* remove all icon windows from the list */ - for (i = 0; i < nchild; i++) { - if (children[i] == None) continue; - wmhints = XGetWMHints(ob_display, children[i]); - if (wmhints) { - if ((wmhints->flags & IconWindowHint) && - (wmhints->icon_window != children[i])) - for (j = 0; j < nchild; j++) - if (children[j] == wmhints->icon_window) { - children[j] = None; - break; - } - XFree(wmhints); - } - } - - /* manage windows in reverse order from how they were originally mapped. - this is an attempt to manage children windows before their parents, so - that when the parent is mapped, it can find the child */ - for (i = 0; i < nchild; ++i) { - if (children[i] == None) - continue; - if (XGetWindowAttributes(ob_display, children[i], &attrib)) { - if (attrib.override_redirect) continue; - - if (attrib.map_state != IsUnmapped) - client_manage(children[i], NULL); - } - } - XFree(children); -} - void client_manage(Window window, ObPrompt *prompt) { ObClient *self; - XEvent e; - XWindowAttributes attrib; XSetWindowAttributes attrib_set; - XWMHints *wmhint; gboolean activate = FALSE; ObAppSettings *settings; gboolean transient = FALSE; Rect place, *monitor; Time launch_time, map_time; - grab_server(TRUE); - - /* check if it has already been unmapped by the time we started - mapping. the grab does a sync so we don't have to here */ - if (XCheckTypedWindowEvent(ob_display, window, DestroyNotify, &e) || - XCheckTypedWindowEvent(ob_display, window, UnmapNotify, &e)) - { - XPutBackEvent(ob_display, &e); - - ob_debug("Trying to manage unmapped window. Aborting that.\n"); - grab_server(FALSE); - return; /* don't manage it */ - } - - /* make sure it isn't an override-redirect window */ - if (!XGetWindowAttributes(ob_display, window, &attrib) || - attrib.override_redirect) - { - grab_server(FALSE); - return; /* don't manage it */ - } - - /* is the window a docking app */ - if ((wmhint = XGetWMHints(ob_display, window))) { - if ((wmhint->flags & StateHint) && - wmhint->initial_state == WithdrawnState) - { - dock_add(window, wmhint); - grab_server(FALSE); - XFree(wmhint); - return; - } - XFree(wmhint); - } - - ob_debug("Managing window: 0x%lx\n", window); + ob_debug("Managing window: 0x%lx", window); map_time = event_get_server_time(); @@@ -213,13 -292,13 +212,13 @@@ attrib_set.event_mask = CLIENT_EVENTMASK | (prompt ? prompt->event_mask : 0); attrib_set.do_not_propagate_mask = CLIENT_NOPROPAGATEMASK; - XChangeWindowAttributes(ob_display, window, + XChangeWindowAttributes(obt_display, window, CWEventMask|CWDontPropagate, &attrib_set); /* create the ObClient struct, and populate it from the hints on the window */ self = g_new0(ObClient, 1); - self->obwin.type = Window_Client; + self->obwin.type = OB_WINDOW_CLASS_CLIENT; self->window = window; self->prompt = prompt; @@@ -231,8 -310,8 +230,8 @@@ /* get all the stuff off the window */ client_get_all(self, TRUE); - ob_debug("Window type: %d\n", self->type); - ob_debug("Window group: 0x%x\n", self->group?self->group->leader:0); + ob_debug("Window type: %d", self->type); + ob_debug("Window group: 0x%x", self->group?self->group->leader:0); /* now we have all of the window's information so we can set this up. do this before creating the frame, so it can tell that we are still @@@ -243,7 -322,7 +242,7 @@@ should be reparented back to root automatically, unless we are managing an internal ObPrompt window */ if (!self->prompt) - XChangeSaveSet(ob_display, window, SetModeInsert); + XChangeSaveSet(obt_display, window, SetModeInsert); /* create the decoration frame for the client window */ self->frame = frame_new(self); @@@ -288,7 -367,7 +287,7 @@@ } /* remove the client's border */ - XSetWindowBorderWidth(ob_display, self->window, 0); + XSetWindowBorderWidth(obt_display, self->window, 0); /* adjust the frame to the client's size before showing or placing the window */ @@@ -301,7 -380,7 +300,7 @@@ /* figure out placement for the window if the window is new */ if (ob_state() == OB_STATE_RUNNING) { - ob_debug("Positioned: %s @ %d %d\n", + ob_debug("Positioned: %s @ %d %d", (!self->positioned ? "no" : (self->positioned == PPosition ? "program specified" : (self->positioned == USPosition ? "user specified" : @@@ -309,7 -388,7 +308,7 @@@ "program + user specified" : "BADNESS !?")))), place.x, place.y); - ob_debug("Sized: %s @ %d %d\n", + ob_debug("Sized: %s @ %d %d", (!self->sized ? "no" : (self->sized == PSize ? "program specified" : (self->sized == USSize ? "user specified" : @@@ -381,7 -460,7 +380,7 @@@ place.width = MIN(place.width, a->width); place.height = MIN(place.height, a->height); - ob_debug("setting window size to %dx%d\n", place.width, place.height); + ob_debug("setting window size to %dx%d", place.width, place.height); /* get the size of the client back */ place.width -= self->frame->size.left + self->frame->size.right; @@@ -391,11 -470,11 +390,11 @@@ } ob_debug("placing window 0x%x at %d, %d with size %d x %d. " - "some restrictions may apply\n", + "some restrictions may apply", self->window, place.x, place.y, place.width, place.height); if (self->session) ob_debug(" but session requested %d, %d %d x %d instead, " - "overriding\n", + "overriding", self->session->x, self->session->y, self->session->w, self->session->h); @@@ -410,7 -489,7 +409,7 @@@ g_free(monitor); monitor = NULL; - ob_debug_type(OB_DEBUG_FOCUS, "Going to try activate new window? %s\n", + ob_debug_type(OB_DEBUG_FOCUS, "Going to try activate new window? %s", activate ? "yes" : "no"); if (activate) { gboolean raise = FALSE; @@@ -426,15 -505,9 +425,15 @@@ /* This is focus stealing prevention */ ob_debug_type(OB_DEBUG_FOCUS, "Want to focus new window 0x%x at time %u " - "launched at %u (last user interaction time %u)\n", + "launched at %u (last user interaction time %u)", self->window, map_time, launch_time, event_last_user_time); + ob_debug_type(OB_DEBUG_FOCUS, + "Current focus_client: %s", + (focus_client ? focus_client->title : "(none)")); + ob_debug_type(OB_DEBUG_FOCUS, + "parent focuesed: %d relative focused: %d", + parent_focused, relative_focused); if (menu_frame_visible || moveresize_in_progress) { activate = FALSE; @@@ -442,7 -515,7 +441,7 @@@ ob_debug_type(OB_DEBUG_FOCUS, "Not focusing the window because the user is inside " "an Openbox menu or is move/resizing a window and " - "we don't want to interrupt them\n"); + "we don't want to interrupt them"); } /* if it's on another desktop */ @@@ -456,7 -529,7 +455,7 @@@ raise = TRUE; ob_debug_type(OB_DEBUG_FOCUS, "Not focusing the window because its on another " - "desktop\n"); + "desktop"); } /* If something is focused... */ else if (focus_client) { @@@ -473,7 -546,7 +472,7 @@@ ob_debug_type(OB_DEBUG_FOCUS, "Not focusing the window because the user is " "working in another window that is not " - "its parent\n"); + "its parent"); } /* If the new window is a transient (and its relatives aren't focused) */ @@@ -481,7 -554,7 +480,7 @@@ activate = FALSE; ob_debug_type(OB_DEBUG_FOCUS, "Not focusing the window because it is a " - "transient, and its relatives aren't focused\n"); + "transient, and its relatives aren't focused"); } /* Don't steal focus from globally active clients. I stole this idea from KWin. It seems nice. @@@ -492,7 -565,7 +491,7 @@@ activate = FALSE; ob_debug_type(OB_DEBUG_FOCUS, "Not focusing the window because a globally " - "active client has focus\n"); + "active client has focus"); } /* Don't move focus if it's not going to go to this window anyway */ @@@ -501,7 -574,7 +500,7 @@@ raise = TRUE; ob_debug_type(OB_DEBUG_FOCUS, "Not focusing the window because another window " - "would get the focus anyway\n"); + "would get the focus anyway"); } /* Don't move focus if the window is not visible on the current desktop and none of its relatives are focused */ @@@ -520,7 -593,7 +519,7 @@@ if (!activate) { ob_debug_type(OB_DEBUG_FOCUS, "Focus stealing prevention activated for %s at " - "time %u (last user interaction time %u)\n", + "time %u (last user interaction time %u)", self->title, map_time, event_last_user_time); /* if the client isn't focused, then hilite it so the user knows it is there */ @@@ -565,7 -638,7 +564,7 @@@ /* add to client list/map */ client_list = g_list_append(client_list, self); - g_hash_table_insert(window_map, &self->window, self); + window_add(&self->window, CLIENT_AS_WINDOW(self)); /* this has to happen after we're in the client_list */ if (STRUT_EXISTS(self->strut)) @@@ -577,19 -650,18 +576,18 @@@ /* free the ObAppSettings shallow copy */ g_free(settings); - ob_debug("Managed window 0x%lx plate 0x%x (%s)\n", + ob_debug("Managed window 0x%lx plate 0x%x (%s)", window, self->frame->window, self->class); - return; + hooks_queue(OB_HOOK_WIN_NEW, self); } - ObClient *client_fake_manage(Window window) { ObClient *self; ObAppSettings *settings; - ob_debug("Pretend-managing window: %lx\n", window); + ob_debug("Pretend-managing window: %lx", window); /* do this minimal stuff to figure out the client's decorations */ @@@ -607,7 -679,7 +605,7 @@@ self->frame = frame_new(self); frame_adjust_area(self->frame, FALSE, TRUE, TRUE); - ob_debug("gave extents left %d right %d top %d bottom %d\n", + ob_debug("gave extents left %d right %d top %d bottom %d", self->frame->size.left, self->frame->size.right, self->frame->size.top, self->frame->size.bottom); @@@ -628,7 -700,7 +626,7 @@@ void client_unmanage(ObClient *self GSList *it; gulong ignore_start; - ob_debug("Unmanaging window: 0x%x plate 0x%x (%s) (%s)\n", + ob_debug("Unmanaging window: 0x%x plate 0x%x (%s) (%s)", self->window, self->frame->window, self->class, self->title ? self->title : ""); @@@ -636,7 -708,7 +634,7 @@@ /* we dont want events no more. do this before hiding the frame so we don't generate more events */ - XSelectInput(ob_display, self->window, NoEventMask); + XSelectInput(obt_display, self->window, NoEventMask); /* ignore enter events from the unmap so it doesnt mess with the focus */ if (!config_focus_under_mouse) @@@ -644,7 -716,7 +642,7 @@@ frame_hide(self->frame); /* flush to send the hide to the server quickly */ - XFlush(ob_display); + XFlush(obt_display); if (!config_focus_under_mouse) event_end_ignore_all_enters(ignore_start); @@@ -654,10 -726,7 +652,10 @@@ /* remove the window from our save set, unless we are managing an internal ObPrompt window */ if (!self->prompt) - XChangeSaveSet(ob_display, self->window, SetModeDelete); + XChangeSaveSet(obt_display, self->window, SetModeDelete); + + /* this can't be queued to run later */ + hooks_run(OB_HOOK_WIN_CLOSE, self); /* update the focus lists */ focus_order_remove(self); @@@ -672,7 -741,7 +670,7 @@@ client_list = g_list_remove(client_list, self); stacking_remove(self); - g_hash_table_remove(window_map, &self->window); + window_remove(self->window); /* once the client is out of the list, update the struts to remove its influence */ @@@ -725,7 -794,7 +723,7 @@@ self->decorations = 0; /* unmanaged windows have no decor */ /* give the client its border back */ - XSetWindowBorderWidth(ob_display, self->window, self->border_width); + XSetWindowBorderWidth(obt_display, self->window, self->border_width); client_move_resize(self, a.x, a.y, a.width, a.height); } @@@ -738,25 -807,25 +736,25 @@@ if (ob_state() != OB_STATE_EXITING) { /* these values should not be persisted across a window unmapping/mapping */ - PROP_ERASE(self->window, net_wm_desktop); - PROP_ERASE(self->window, net_wm_state); - PROP_ERASE(self->window, wm_state); + OBT_PROP_ERASE(self->window, NET_WM_DESKTOP); + OBT_PROP_ERASE(self->window, NET_WM_STATE); + OBT_PROP_ERASE(self->window, WM_STATE); } else { /* if we're left in an unmapped state, the client wont be mapped. this is bad, since we will no longer be managing the window on restart */ - XMapWindow(ob_display, self->window); + XMapWindow(obt_display, self->window); } /* these should not be left on the window ever. other window managers don't necessarily use them and it will mess them up (like compiz) */ - PROP_ERASE(self->window, net_wm_visible_name); - PROP_ERASE(self->window, net_wm_visible_icon_name); + OBT_PROP_ERASE(self->window, NET_WM_VISIBLE_NAME); + OBT_PROP_ERASE(self->window, NET_WM_VISIBLE_ICON_NAME); /* update the list hints */ client_set_list(); - ob_debug("Unmanaged window 0x%lx\n", self->window); + ob_debug("Unmanaged window 0x%lx", self->window); /* free all data allocated in the client struct */ RrImageUnref(self->icon_set); @@@ -814,7 -883,7 +812,7 @@@ static ObAppSettings *client_get_settin match = FALSE; if (match) { - ob_debug("Window matching: %s\n", app->name); + ob_debug("Window matching: %s", app->name); /* copy the settings to our struct, overriding the existing settings if they are not defaults */ @@@ -869,17 -938,17 +867,17 @@@ static void client_restore_session_stat GList *it; ob_debug_type(OB_DEBUG_SM, - "Restore session for client %s\n", self->title); + "Restore session for client %s", self->title); if (!(it = session_state_find(self))) { ob_debug_type(OB_DEBUG_SM, - "Session data not found for client %s\n", self->title); + "Session data not found for client %s", self->title); return; } self->session = it->data; - ob_debug_type(OB_DEBUG_SM, "Session data loaded for client %s\n", + ob_debug_type(OB_DEBUG_SM, "Session data loaded for client %s", self->title); RECT_SET_POINT(self->area, self->session->x, self->session->y); @@@ -889,13 -958,13 +887,13 @@@ self->area.width = self->session->w; if (self->session->h > 0) self->area.height = self->session->h; - XResizeWindow(ob_display, self->window, + XResizeWindow(obt_display, self->window, self->area.width, self->area.height); self->desktop = (self->session->desktop == DESKTOP_ALL ? self->session->desktop : MIN(screen_num_desktops - 1, self->session->desktop)); - PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop); + OBT_PROP_SET32(self->window, NET_WM_DESKTOP, CARDINAL, self->desktop); self->shaded = self->session->shaded; self->iconic = self->session->iconic; @@@ -1122,11 -1191,10 +1120,11 @@@ static void client_get_all(ObClient *se static void client_get_startup_id(ObClient *self) { - if (!(PROP_GETS(self->window, net_startup_id, utf8, &self->startup_id))) + if (!(OBT_PROP_GETS(self->window, NET_STARTUP_ID, utf8, + &self->startup_id))) if (self->group) - PROP_GETS(self->group->leader, - net_startup_id, utf8, &self->startup_id); + OBT_PROP_GETS(self->group->leader, + NET_STARTUP_ID, utf8, &self->startup_id); } static void client_get_area(ObClient *self) @@@ -1134,14 -1202,14 +1132,14 @@@ XWindowAttributes wattrib; Status ret; - ret = XGetWindowAttributes(ob_display, self->window, &wattrib); + ret = XGetWindowAttributes(obt_display, self->window, &wattrib); g_assert(ret != BadWindow); RECT_SET(self->area, wattrib.x, wattrib.y, wattrib.width, wattrib.height); POINT_SET(self->root_pos, wattrib.x, wattrib.y); self->border_width = wattrib.border_width; - ob_debug("client area: %d %d %d %d bw %d\n", wattrib.x, wattrib.y, + ob_debug("client area: %d %d %d %d bw %d", wattrib.x, wattrib.y, wattrib.width, wattrib.height, wattrib.border_width); } @@@ -1149,12 -1217,12 +1147,12 @@@ static void client_get_desktop(ObClien { guint32 d = screen_num_desktops; /* an always-invalid value */ - if (PROP_GET32(self->window, net_wm_desktop, cardinal, &d)) { + if (OBT_PROP_GET32(self->window, NET_WM_DESKTOP, CARDINAL, &d)) { if (d >= screen_num_desktops && d != DESKTOP_ALL) self->desktop = screen_num_desktops - 1; else self->desktop = d; - ob_debug("client requested desktop 0x%x\n", self->desktop); + ob_debug("client requested desktop 0x%x", self->desktop); } else { GSList *it; gboolean first = TRUE; @@@ -1177,7 -1245,7 +1175,7 @@@ if (all != screen_num_desktops) { self->desktop = all; - ob_debug("client desktop set from parents: 0x%x\n", + ob_debug("client desktop set from parents: 0x%x", self->desktop); } /* try get from the startup-notification protocol */ @@@ -1185,13 -1253,13 +1183,13 @@@ if (self->desktop >= screen_num_desktops && self->desktop != DESKTOP_ALL) self->desktop = screen_num_desktops - 1; - ob_debug("client desktop set from startup-notification: 0x%x\n", + ob_debug("client desktop set from startup-notification: 0x%x", self->desktop); } /* defaults to the current desktop */ else { self->desktop = screen_desktop; - ob_debug("client desktop set to the current desktop: %d\n", + ob_debug("client desktop set to the current desktop: %d", self->desktop); } } @@@ -1202,32 -1270,32 +1200,32 @@@ static void client_get_state(ObClient * guint32 *state; guint num; - if (PROP_GETA32(self->window, net_wm_state, atom, &state, &num)) { + if (OBT_PROP_GETA32(self->window, NET_WM_STATE, ATOM, &state, &num)) { gulong i; for (i = 0; i < num; ++i) { - if (state[i] == prop_atoms.net_wm_state_modal) + if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MODAL)) self->modal = TRUE; - else if (state[i] == prop_atoms.net_wm_state_shaded) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_SHADED)) self->shaded = TRUE; - else if (state[i] == prop_atoms.net_wm_state_hidden) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_HIDDEN)) self->iconic = TRUE; - else if (state[i] == prop_atoms.net_wm_state_skip_taskbar) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_SKIP_TASKBAR)) self->skip_taskbar = TRUE; - else if (state[i] == prop_atoms.net_wm_state_skip_pager) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_SKIP_PAGER)) self->skip_pager = TRUE; - else if (state[i] == prop_atoms.net_wm_state_fullscreen) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_FULLSCREEN)) self->fullscreen = TRUE; - else if (state[i] == prop_atoms.net_wm_state_maximized_vert) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT)) self->max_vert = TRUE; - else if (state[i] == prop_atoms.net_wm_state_maximized_horz) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ)) self->max_horz = TRUE; - else if (state[i] == prop_atoms.net_wm_state_above) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_ABOVE)) self->above = TRUE; - else if (state[i] == prop_atoms.net_wm_state_below) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_BELOW)) self->below = TRUE; - else if (state[i] == prop_atoms.net_wm_state_demands_attention) + else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_DEMANDS_ATTENTION)) self->demands_attention = TRUE; - else if (state[i] == prop_atoms.ob_wm_state_undecorated) + else if (state[i] == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED)) self->undecorated = TRUE; } @@@ -1239,14 -1307,14 +1237,14 @@@ static void client_get_shaped(ObClient { self->shaped = FALSE; #ifdef SHAPE - if (extensions_shape) { + if (obt_display_extension_shape) { gint foo; guint ufoo; gint s; - XShapeSelectInput(ob_display, self->window, ShapeNotifyMask); + XShapeSelectInput(obt_display, self->window, ShapeNotifyMask); - XShapeQueryExtents(ob_display, self->window, &s, &foo, + XShapeQueryExtents(obt_display, self->window, &s, &foo, &foo, &ufoo, &ufoo, &foo, &foo, &foo, &ufoo, &ufoo); self->shaped = !!s; @@@ -1260,22 -1328,22 +1258,22 @@@ void client_update_transient_for(ObClie ObClient *target = NULL; gboolean trangroup = FALSE; - if (XGetTransientForHint(ob_display, self->window, &t)) { + if (XGetTransientForHint(obt_display, self->window, &t)) { if (t != self->window) { /* can't be transient to itself! */ - target = g_hash_table_lookup(window_map, &t); + ObWindow *tw = window_find(t); /* if this happens then we need to check for it */ - g_assert(target != self); - if (target && !WINDOW_IS_CLIENT(target)) { + g_assert(tw != CLIENT_AS_WINDOW(self)); + if (tw && WINDOW_IS_CLIENT(tw)) { /* watch out for windows with a parent that is something different, like a dockapp for example */ - target = NULL; + target = WINDOW_AS_CLIENT(tw); } } /* Setting the transient_for to Root is actually illegal, however applications from time have done this to specify transient for their group */ - if (!target && self->group && t == RootWindow(ob_display, ob_screen)) + if (!target && self->group && t == obt_root(ob_screen)) trangroup = TRUE; } else if (self->group && self->transient) trangroup = TRUE; @@@ -1310,7 -1378,6 +1308,6 @@@ static void client_update_transient_tre transient windows as their children. * * */ - /* No change has occured */ if (oldgroup == newgroup && oldgtran == newgtran && @@@ -1411,8 -1478,8 +1408,8 @@@ static void client_get_mwm_hints(ObClie self->mwmhints.flags = 0; /* default to none */ - if (PROP_GETA32(self->window, motif_wm_hints, motif_wm_hints, - &hints, &num)) { + if (OBT_PROP_GETA32(self->window, MOTIF_WM_HINTS, MOTIF_WM_HINTS, + &hints, &num)) { if (num >= OB_MWM_ELEMENTS) { self->mwmhints.flags = hints[0]; self->mwmhints.functions = hints[1]; @@@ -1431,27 -1498,26 +1428,27 @@@ void client_get_type_and_transientness( self->type = -1; self->transient = FALSE; - if (PROP_GETA32(self->window, net_wm_window_type, atom, &val, &num)) { + if (OBT_PROP_GETA32(self->window, NET_WM_WINDOW_TYPE, ATOM, &val, &num)) { /* use the first value that we know about in the array */ for (i = 0; i < num; ++i) { - if (val[i] == prop_atoms.net_wm_window_type_desktop) + if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_DESKTOP)) self->type = OB_CLIENT_TYPE_DESKTOP; - else if (val[i] == prop_atoms.net_wm_window_type_dock) + else if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_DOCK)) self->type = OB_CLIENT_TYPE_DOCK; - else if (val[i] == prop_atoms.net_wm_window_type_toolbar) + else if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_TOOLBAR)) self->type = OB_CLIENT_TYPE_TOOLBAR; - else if (val[i] == prop_atoms.net_wm_window_type_menu) + else if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_MENU)) self->type = OB_CLIENT_TYPE_MENU; - else if (val[i] == prop_atoms.net_wm_window_type_utility) + else if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_UTILITY)) self->type = OB_CLIENT_TYPE_UTILITY; - else if (val[i] == prop_atoms.net_wm_window_type_splash) + else if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_SPLASH)) self->type = OB_CLIENT_TYPE_SPLASH; - else if (val[i] == prop_atoms.net_wm_window_type_dialog) + else if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_DIALOG)) self->type = OB_CLIENT_TYPE_DIALOG; - else if (val[i] == prop_atoms.net_wm_window_type_normal) + else if (val[i] == OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_NORMAL)) self->type = OB_CLIENT_TYPE_NORMAL; - else if (val[i] == prop_atoms.kde_net_wm_window_type_override) { + else if (val[i] == OBT_PROP_ATOM(KDE_NET_WM_WINDOW_TYPE_OVERRIDE)) + { /* prevent this window from getting any decor or functionality */ self->mwmhints.flags &= (OB_MWM_FLAG_FUNCTIONS | @@@ -1465,7 -1531,7 +1462,7 @@@ g_free(val); } - if (XGetTransientForHint(ob_display, self->window, &t)) + if (XGetTransientForHint(obt_display, self->window, &t)) self->transient = TRUE; if (self->type == (ObClientType) -1) { @@@ -1491,26 -1557,26 +1488,26 @@@ void client_update_protocols(ObClient *self) { guint32 *proto; - guint num_return, i; + guint num_ret, i; self->focus_notify = FALSE; self->delete_window = FALSE; - if (PROP_GETA32(self->window, wm_protocols, atom, &proto, &num_return)) { - for (i = 0; i < num_return; ++i) { - if (proto[i] == prop_atoms.wm_delete_window) + if (OBT_PROP_GETA32(self->window, WM_PROTOCOLS, ATOM, &proto, &num_ret)) { + for (i = 0; i < num_ret; ++i) { + if (proto[i] == OBT_PROP_ATOM(WM_DELETE_WINDOW)) /* this means we can request the window to close */ self->delete_window = TRUE; - else if (proto[i] == prop_atoms.wm_take_focus) + else if (proto[i] == OBT_PROP_ATOM(WM_TAKE_FOCUS)) /* if this protocol is requested, then the window will be notified whenever we want it to receive focus */ self->focus_notify = TRUE; - else if (proto[i] == prop_atoms.net_wm_ping) + else if (proto[i] == OBT_PROP_ATOM(NET_WM_PING)) /* if this protocol is requested, then the window will allow pings to determine if it is still alive */ self->ping = TRUE; #ifdef SYNC - else if (proto[i] == prop_atoms.net_wm_sync_request) + else if (proto[i] == OBT_PROP_ATOM(NET_WM_SYNC_REQUEST)) /* if this protocol is requested, then resizing the window will be synchronized between the frame and the client */ @@@ -1526,8 -1592,7 +1523,8 @@@ void client_update_sync_request_counter { guint32 i; - if (PROP_GET32(self->window, net_wm_sync_request_counter, cardinal, &i)) { + if (OBT_PROP_GET32(self->window, NET_WM_SYNC_REQUEST_COUNTER, CARDINAL,&i)) + { self->sync_counter = i; } else self->sync_counter = None; @@@ -1538,7 -1603,7 +1535,7 @@@ static void client_get_colormap(ObClien { XWindowAttributes wa; - if (XGetWindowAttributes(ob_display, self->window, &wa)) + if (XGetWindowAttributes(obt_display, self->window, &wa)) client_update_colormap(self, wa.colormap); } @@@ -1546,7 -1611,7 +1543,7 @@@ void client_update_colormap(ObClient *s { if (colormap == self->colormap) return; - ob_debug("Setting client %s colormap: 0x%x\n", self->title, colormap); + ob_debug("Setting client %s colormap: 0x%x", self->title, colormap); if (client_focused(self)) { screen_install_colormap(self, FALSE); /* uninstall old one */ @@@ -1570,7 -1635,7 +1567,7 @@@ void client_update_normal_hints(ObClien SIZE_SET(self->max_size, G_MAXINT, G_MAXINT); /* get the hints from the window */ - if (XGetWMNormalHints(ob_display, self->window, &size, &ret)) { + if (XGetWMNormalHints(obt_display, self->window, &size, &ret)) { /* normal windows can't request placement! har har if (!client_normal(self)) */ @@@ -1601,15 -1666,15 +1598,15 @@@ if (size.flags & PResizeInc && size.width_inc && size.height_inc) SIZE_SET(self->size_inc, size.width_inc, size.height_inc); - ob_debug("Normal hints: min size (%d %d) max size (%d %d)\n " - "size inc (%d %d) base size (%d %d)\n", + ob_debug("Normal hints: min size (%d %d) max size (%d %d)", self->min_size.width, self->min_size.height, - self->max_size.width, self->max_size.height, + self->max_size.width, self->max_size.height); + ob_debug("size inc (%d %d) base size (%d %d)", self->size_inc.width, self->size_inc.height, self->base_size.width, self->base_size.height); } else - ob_debug("Normal hints: not set\n"); + ob_debug("Normal hints: not set"); } void client_setup_decor_and_functions(ObClient *self, gboolean reconfig) @@@ -1782,38 -1847,38 +1779,38 @@@ static void client_change_allowed_actio /* desktop windows are kept on all desktops */ if (self->type != OB_CLIENT_TYPE_DESKTOP) - actions[num++] = prop_atoms.net_wm_action_change_desktop; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_CHANGE_DESKTOP); if (self->functions & OB_CLIENT_FUNC_SHADE) - actions[num++] = prop_atoms.net_wm_action_shade; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_SHADE); if (self->functions & OB_CLIENT_FUNC_CLOSE) - actions[num++] = prop_atoms.net_wm_action_close; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_CLOSE); if (self->functions & OB_CLIENT_FUNC_MOVE) - actions[num++] = prop_atoms.net_wm_action_move; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_MOVE); if (self->functions & OB_CLIENT_FUNC_ICONIFY) - actions[num++] = prop_atoms.net_wm_action_minimize; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_MINIMIZE); if (self->functions & OB_CLIENT_FUNC_RESIZE) - actions[num++] = prop_atoms.net_wm_action_resize; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_RESIZE); if (self->functions & OB_CLIENT_FUNC_FULLSCREEN) - actions[num++] = prop_atoms.net_wm_action_fullscreen; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_FULLSCREEN); if (self->functions & OB_CLIENT_FUNC_MAXIMIZE) { - actions[num++] = prop_atoms.net_wm_action_maximize_horz; - actions[num++] = prop_atoms.net_wm_action_maximize_vert; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_MAXIMIZE_HORZ); + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_MAXIMIZE_VERT); } if (self->functions & OB_CLIENT_FUNC_ABOVE) - actions[num++] = prop_atoms.net_wm_action_above; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_ABOVE); if (self->functions & OB_CLIENT_FUNC_BELOW) - actions[num++] = prop_atoms.net_wm_action_below; + actions[num++] = OBT_PROP_ATOM(NET_WM_ACTION_BELOW); if (self->functions & OB_CLIENT_FUNC_UNDECORATE) - actions[num++] = prop_atoms.ob_wm_action_undecorate; + actions[num++] = OBT_PROP_ATOM(OB_WM_ACTION_UNDECORATE); - PROP_SETA32(self->window, net_wm_allowed_actions, atom, actions, num); + OBT_PROP_SETA32(self->window, NET_WM_ALLOWED_ACTIONS, ATOM, actions, num); - /* make sure the window isn't breaking any rules now + /* make sure the window isn't breaking any rules now - don't check ICONIFY here. just cuz a window can't iconify doesnt mean - it can't be iconified with its parent - */ + don't check ICONIFY here. just cuz a window can't iconify doesnt mean + it can't be iconified with its parent + */ if (!(self->functions & OB_CLIENT_FUNC_SHADE) && self->shaded) { if (self->frame) client_shade(self, FALSE); @@@ -1837,7 -1902,7 +1834,7 @@@ void client_update_wmhints(ObClient *se /* assume a window takes input if it doesn't specify */ self->can_focus = TRUE; - if ((hints = XGetWMHints(ob_display, self->window)) != NULL) { + if ((hints = XGetWMHints(obt_display, self->window)) != NULL) { gboolean ur; if (hints->flags & InputHint) @@@ -1926,10 -1991,10 +1923,10 @@@ void client_update_title(ObClient *self g_free(self->original_title); /* try netwm */ - if (!PROP_GETS(self->window, net_wm_name, utf8, &data)) { + if (!OBT_PROP_GETS(self->window, NET_WM_NAME, utf8, &data)) { /* try old x stuff */ - if (!(PROP_GETS(self->window, wm_name, locale, &data) - || PROP_GETS(self->window, wm_name, utf8, &data))) { + if (!(OBT_PROP_GETS(self->window, WM_NAME, locale, &data) + || OBT_PROP_GETS(self->window, WM_NAME, utf8, &data))) { if (self->transient) { /* GNOME alert windows are not given titles: @@@ -1957,7 -2022,7 +1954,7 @@@ g_free(data); } - PROP_SETS(self->window, net_wm_visible_name, visible); + OBT_PROP_SETS(self->window, NET_WM_VISIBLE_NAME, utf8, visible); self->title = visible; if (self->frame) @@@ -1968,10 -2033,10 +1965,10 @@@ g_free(self->icon_title); /* try netwm */ - if (!PROP_GETS(self->window, net_wm_icon_name, utf8, &data)) + if (!OBT_PROP_GETS(self->window, NET_WM_ICON_NAME, utf8, &data)) /* try old x stuff */ - if (!(PROP_GETS(self->window, wm_icon_name, locale, &data) || - PROP_GETS(self->window, wm_icon_name, utf8, &data))) + if (!(OBT_PROP_GETS(self->window, WM_ICON_NAME, locale, &data) || + OBT_PROP_GETS(self->window, WM_ICON_NAME, utf8, &data))) data = g_strdup(self->title); if (self->client_machine) { @@@ -1989,7 -2054,7 +1986,7 @@@ g_free(data); } - PROP_SETS(self->window, net_wm_visible_icon_name, visible); + OBT_PROP_SETS(self->window, NET_WM_VISIBLE_ICON_NAME, utf8, visible); self->icon_title = visible; } @@@ -2000,9 -2065,8 +1997,9 @@@ void client_update_strut(ObClient *self gboolean got = FALSE; StrutPartial strut; - if (PROP_GETA32(self->window, net_wm_strut_partial, cardinal, - &data, &num)) { + if (OBT_PROP_GETA32(self->window, NET_WM_STRUT_PARTIAL, CARDINAL, + &data, &num)) + { if (num == 12) { got = TRUE; STRUT_PARTIAL_SET(strut, @@@ -2014,7 -2078,7 +2011,7 @@@ } if (!got && - PROP_GETA32(self->window, net_wm_strut, cardinal, &data, &num)) { + OBT_PROP_GETA32(self->window, NET_WM_STRUT, CARDINAL, &data, &num)) { if (num == 4) { Rect *a; @@@ -2063,7 -2127,7 +2060,7 @@@ void client_update_icons(ObClient *self icon */ grab_server(TRUE); - if (PROP_GETA32(self->window, net_wm_icon, cardinal, &data, &num)) { + if (OBT_PROP_GETA32(self->window, NET_WM_ICON, CARDINAL, &data, &num)) { /* figure out how many valid icons are in here */ i = 0; num_seen = 0; @@@ -2115,18 -2179,17 +2112,17 @@@ if (!img) { XWMHints *hints; - if ((hints = XGetWMHints(ob_display, self->window))) { + if ((hints = XGetWMHints(obt_display, self->window))) { if (hints->flags & IconPixmapHint) { gboolean xicon; - xerror_set_ignore(TRUE); + obt_display_ignore_errors(TRUE); xicon = RrPixmapToRGBA(ob_rr_inst, hints->icon_pixmap, (hints->flags & IconMaskHint ? hints->icon_mask : None), (gint*)&w, (gint*)&h, &data); - xerror_set_ignore(FALSE); + obt_display_ignore_errors(FALSE); - if (xicon) { if (w > 0 && h > 0) { /* is this icon in the cache yet? */ @@@ -2168,7 -2231,7 +2164,7 @@@ (((icon[i] >> RrDefaultRedOffset) & 0xff) << 16) + (((icon[i] >> RrDefaultGreenOffset) & 0xff) << 8) + (((icon[i] >> RrDefaultBlueOffset) & 0xff) << 0); - PROP_SETA32(self->window, net_wm_icon, cardinal, ldata, w*h+2); + OBT_PROP_SETA32(self->window, NET_WM_ICON, CARDINAL, ldata, w*h+2); g_free(ldata); } else if (self->frame) /* don't draw the icon empty if we're just setting one now anyways, @@@ -2185,8 -2248,7 +2181,8 @@@ void client_update_icon_geometry(ObClie RECT_SET(self->icon_geometry, 0, 0, 0, 0); - if (PROP_GETA32(self->window, net_wm_icon_geometry, cardinal, &data, &num)) + if (OBT_PROP_GETA32(self->window, NET_WM_ICON_GEOMETRY, CARDINAL, + &data, &num)) { if (num == 4) /* don't let them set it with an area < 0 */ @@@ -2203,23 -2265,23 +2199,23 @@@ static void client_get_session_ids(ObCl gchar *s; gchar **ss; - if (!PROP_GET32(self->window, wm_client_leader, window, &leader)) + if (!OBT_PROP_GET32(self->window, WM_CLIENT_LEADER, WINDOW, &leader)) leader = None; /* get the SM_CLIENT_ID */ got = FALSE; if (leader) - got = PROP_GETS(leader, sm_client_id, locale, &self->sm_client_id); + got = OBT_PROP_GETS(leader, SM_CLIENT_ID, locale, &self->sm_client_id); if (!got) - PROP_GETS(self->window, sm_client_id, locale, &self->sm_client_id); + OBT_PROP_GETS(self->window, SM_CLIENT_ID, locale, &self->sm_client_id); /* get the WM_CLASS (name and class). make them "" if they are not provided */ got = FALSE; if (leader) - got = PROP_GETSS(leader, wm_class, locale, &ss); + got = OBT_PROP_GETSS(leader, WM_CLASS, locale, &ss); if (!got) - got = PROP_GETSS(self->window, wm_class, locale, &ss); + got = OBT_PROP_GETSS(self->window, WM_CLASS, locale, &ss); if (got) { if (ss[0]) { @@@ -2236,9 -2298,9 +2232,9 @@@ /* get the WM_WINDOW_ROLE. make it "" if it is not provided */ got = FALSE; if (leader) - got = PROP_GETS(leader, wm_window_role, locale, &s); + got = OBT_PROP_GETS(leader, WM_WINDOW_ROLE, locale, &s); if (!got) - got = PROP_GETS(self->window, wm_window_role, locale, &s); + got = OBT_PROP_GETS(self->window, WM_WINDOW_ROLE, locale, &s); if (got) self->role = s; @@@ -2249,9 -2311,9 +2245,9 @@@ got = FALSE; if (leader) - got = PROP_GETSS(leader, wm_command, locale, &ss); + got = OBT_PROP_GETSS(leader, WM_COMMAND, locale, &ss); if (!got) - got = PROP_GETSS(self->window, wm_command, locale, &ss); + got = OBT_PROP_GETSS(self->window, WM_COMMAND, locale, &ss); if (got) { /* merge/mash them all together */ @@@ -2274,9 -2336,9 +2270,9 @@@ /* get the WM_CLIENT_MACHINE */ got = FALSE; if (leader) - got = PROP_GETS(leader, wm_client_machine, locale, &s); + got = OBT_PROP_GETS(leader, WM_CLIENT_MACHINE, locale, &s); if (!got) - got = PROP_GETS(self->window, wm_client_machine, locale, &s); + got = OBT_PROP_GETS(self->window, WM_CLIENT_MACHINE, locale, &s); if (got) { gchar localhost[128]; @@@ -2291,7 -2353,7 +2287,7 @@@ /* see if it has the PID set too (the PID requires that the WM_CLIENT_MACHINE be set) */ - if (PROP_GET32(self->window, net_wm_pid, cardinal, &pid)) + if (OBT_PROP_GET32(self->window, NET_WM_PID, CARDINAL, &pid)) self->pid = pid; } } @@@ -2311,12 -2373,12 +2307,12 @@@ static void client_change_wm_state(ObCl self->wmstate = NormalState; if (old != self->wmstate) { - PROP_MSG(self->window, kde_wm_change_state, - self->wmstate, 1, 0, 0); + OBT_PROP_MSG(ob_screen, self->window, KDE_WM_CHANGE_STATE, + self->wmstate, 1, 0, 0, 0); state[0] = self->wmstate; state[1] = None; - PROP_SETA32(self->window, wm_state, wm_state, state, 2); + OBT_PROP_SETA32(self->window, WM_STATE, WM_STATE, state, 2); } } @@@ -2327,30 -2389,30 +2323,30 @@@ static void client_change_state(ObClien num = 0; if (self->modal) - netstate[num++] = prop_atoms.net_wm_state_modal; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_MODAL); if (self->shaded) - netstate[num++] = prop_atoms.net_wm_state_shaded; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_SHADED); if (self->iconic) - netstate[num++] = prop_atoms.net_wm_state_hidden; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_HIDDEN); if (self->skip_taskbar) - netstate[num++] = prop_atoms.net_wm_state_skip_taskbar; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_SKIP_TASKBAR); if (self->skip_pager) - netstate[num++] = prop_atoms.net_wm_state_skip_pager; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_SKIP_PAGER); if (self->fullscreen) - netstate[num++] = prop_atoms.net_wm_state_fullscreen; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_FULLSCREEN); if (self->max_vert) - netstate[num++] = prop_atoms.net_wm_state_maximized_vert; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT); if (self->max_horz) - netstate[num++] = prop_atoms.net_wm_state_maximized_horz; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ); if (self->above) - netstate[num++] = prop_atoms.net_wm_state_above; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_ABOVE); if (self->below) - netstate[num++] = prop_atoms.net_wm_state_below; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_BELOW); if (self->demands_attention) - netstate[num++] = prop_atoms.net_wm_state_demands_attention; + netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_DEMANDS_ATTENTION); if (self->undecorated) - netstate[num++] = prop_atoms.ob_wm_state_undecorated; - PROP_SETA32(self->window, net_wm_state, atom, netstate, num); + netstate[num++] = OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED); + OBT_PROP_SETA32(self->window, NET_WM_STATE, ATOM, netstate, num); if (self->frame) frame_adjust_state(self->frame); @@@ -2543,8 -2605,6 +2539,8 @@@ gboolean client_show(ObClient *self desktop! */ client_change_wm_state(self); + + hooks_queue(OB_HOOK_WIN_VISIBLE, self); } return show; } @@@ -2583,8 -2643,6 +2579,8 @@@ gboolean client_hide(ObClient *self desktop! */ client_change_wm_state(self); + + hooks_queue(OB_HOOK_WIN_INVISIBLE, self); } return hide; } @@@ -2623,7 -2681,6 +2619,6 @@@ gboolean client_enter_focusable(ObClien self->type != OB_CLIENT_TYPE_DESKTOP); } - static void client_apply_startup_state(ObClient *self, gint x, gint y, gint w, gint h) { @@@ -2653,7 -2710,7 +2648,7 @@@ pre-max/pre-fullscreen values */ client_try_configure(self, &x, &y, &w, &h, &l, &l, FALSE); - ob_debug("placed window 0x%x at %d, %d with size %d x %d\n", + ob_debug("placed window 0x%x at %d, %d with size %d x %d", self->window, x, y, w, h); /* save the area, and make it where it should be for the premax stuff */ oldarea = self->area; @@@ -2693,7 -2750,7 +2688,7 @@@ client_configure(self, x, y, w, h, FALSE, TRUE, FALSE); /* set the desktop hint, to make sure that it always exists */ - PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop); + OBT_PROP_SET32(self->window, NET_WM_DESKTOP, CARDINAL, self->desktop); /* nothing to do for the other states: skip_taskbar @@@ -2933,7 -2990,6 +2928,6 @@@ void client_try_configure(ObClient *sel g_assert(*h > 0); } - void client_configure(ObClient *self, gint x, gint y, gint w, gint h, gboolean user, gboolean final, gboolean force_reply) { @@@ -2972,7 -3028,7 +2966,7 @@@ /* if the client is enlarging, then resize the client before the frame */ if (send_resize_client && (w > oldw || h > oldh)) { - XMoveResizeWindow(ob_display, self->window, + XMoveResizeWindow(obt_display, self->window, self->frame->size.left, self->frame->size.top, MAX(w, oldw), MAX(h, oldh)); frame_adjust_client_area(self->frame); @@@ -3038,11 -3094,11 +3032,11 @@@ XEvent event; event.type = ConfigureNotify; - event.xconfigure.display = ob_display; + event.xconfigure.display = obt_display; event.xconfigure.event = self->window; event.xconfigure.window = self->window; - ob_debug("Sending ConfigureNotify to %s for %d,%d %dx%d\n", + ob_debug("Sending ConfigureNotify to %s for %d,%d %dx%d", self->title, self->root_pos.x, self->root_pos.y, w, h); /* root window real coords */ @@@ -3064,11 -3120,11 +3058,11 @@@ */ if (send_resize_client && (w <= oldw || h <= oldh)) { frame_adjust_client_area(self->frame); - XMoveResizeWindow(ob_display, self->window, + XMoveResizeWindow(obt_display, self->window, self->frame->size.left, self->frame->size.top, w, h); } - XFlush(ob_display); + XFlush(obt_display); /* if it moved between monitors, then this can affect the stacking layer of this window or others - for fullscreen windows */ @@@ -3119,7 -3175,7 +3113,7 @@@ void client_fullscreen(ObClient *self, RECT_SET(self->pre_fullscreen_area, 0, 0, 0, 0); } - ob_debug("Window %s going fullscreen (%d)\n", + ob_debug("Window %s going fullscreen (%d)", self->title, self->fullscreen); client_setup_decor_and_functions(self, FALSE); @@@ -3144,7 -3200,7 +3138,7 @@@ static void client_iconify_recursive(Ob gboolean changed = FALSE; if (self->iconic != iconic) { - ob_debug("%sconifying window: 0x%lx\n", (iconic ? "I" : "Uni"), + ob_debug("%sconifying window: 0x%lx", (iconic ? "I" : "Uni"), self->window); if (iconic) { @@@ -3180,9 -3236,6 +3174,9 @@@ frame_begin_iconify_animation(self->frame, iconic); /* do this after starting the animation so it doesn't flash */ client_showhide(self); + + hooks_queue((iconic ? OB_HOOK_WIN_ICONIC : OB_HOOK_WIN_UNICONIC), + self); } /* iconify all direct transients, and deiconify all transients @@@ -3270,8 -3323,6 +3264,8 @@@ void client_maximize(ObClient *self, gb client_setup_decor_and_functions(self, FALSE); client_move_resize(self, x, y, w, h); + + hooks_queue((max ? OB_HOOK_WIN_MAX : OB_HOOK_WIN_UNMAX), self); } void client_shade(ObClient *self, gboolean shade) @@@ -3285,8 -3336,6 +3279,8 @@@ client_change_wm_state(self); /* the window is being hidden/shown */ /* resize the frame to just the titlebar */ frame_adjust_area(self->frame, FALSE, TRUE, FALSE); + + hooks_queue((shade ? OB_HOOK_WIN_SHADE : OB_HOOK_WIN_UNSHADE), self); } static void client_ping_event(ObClient *self, gboolean dead) @@@ -3326,12 -3375,12 +3320,12 @@@ void client_close(ObClient *self if (!self->delete_window) /* don't use client_kill(), we should only kill based on PID in response to a lack of PING replies */ - XKillClient(ob_display, self->window); + XKillClient(obt_display, self->window); else { /* request the client to close with WM_DELETE_WINDOW */ - PROP_MSG_TO(self->window, self->window, wm_protocols, - prop_atoms.wm_delete_window, event_curtime, 0, 0, 0, - NoEventMask); + OBT_PROP_MSG_TO(self->window, self->window, WM_PROTOCOLS, + OBT_PROP_ATOM(WM_DELETE_WINDOW), event_curtime, + 0, 0, 0, NoEventMask); /* we're trying to close the window, so see if it is responding. if it is not, then we will let them kill the window */ @@@ -3439,14 -3488,14 +3433,14 @@@ void client_kill(ObClient *self client_update_title(self); } else { - ob_debug("killing window 0x%x with pid %lu, with SIGKILL\n", + ob_debug("killing window 0x%x with pid %lu, with SIGKILL", self->window, self->pid); kill(self->pid, SIGKILL); /* kill -9 */ } } else { /* running on a remote host */ - XKillClient(ob_display, self->window); + XKillClient(obt_display, self->window); } } @@@ -3476,13 -3525,13 +3470,13 @@@ static void client_set_desktop_recursiv if (target != self->desktop && self->type != OB_CLIENT_TYPE_DESKTOP) { - ob_debug("Setting desktop %u\n", target+1); + ob_debug("Setting desktop %u", target+1); g_assert(target < screen_num_desktops || target == DESKTOP_ALL); old = self->desktop; self->desktop = target; - PROP_SET32(self->window, net_wm_desktop, cardinal, target); + OBT_PROP_SET32(self->window, NET_WM_DESKTOP, CARDINAL, target); /* the frame can display the current desktop state */ frame_adjust_state(self->frame); /* 'move' the window to the new desktop */ @@@ -3498,9 -3547,6 +3492,9 @@@ /* the new desktop's geometry may be different, so we may need to resize, for example if we are maximized */ client_reconfigure(self, FALSE); + + if (old != self->desktop) + hooks_queue(OB_HOOK_WIN_DESK_CHANGE, self); } /* move all transients */ @@@ -3541,12 -3587,11 +3535,12 @@@ gboolean client_validate(ObClient *self { XEvent e; - XSync(ob_display, FALSE); /* get all events on the server */ + XSync(obt_display, FALSE); /* get all events on the server */ - if (XCheckTypedWindowEvent(ob_display, self->window, DestroyNotify, &e) || - XCheckTypedWindowEvent(ob_display, self->window, UnmapNotify, &e)) { - XPutBackEvent(ob_display, &e); + if (XCheckTypedWindowEvent(obt_display, self->window, DestroyNotify, &e) || + XCheckTypedWindowEvent(obt_display, self->window, UnmapNotify, &e)) + { + XPutBackEvent(obt_display, &e); return FALSE; } @@@ -3580,11 -3625,10 +3574,11 @@@ void client_set_state(ObClient *self, A gboolean above = self->above; gboolean below = self->below; gint i; + gboolean value; - if (!(action == prop_atoms.net_wm_state_add || - action == prop_atoms.net_wm_state_remove || - action == prop_atoms.net_wm_state_toggle)) + if (!(action == OBT_PROP_ATOM(NET_WM_STATE_ADD) || + action == OBT_PROP_ATOM(NET_WM_STATE_REMOVE) || + action == OBT_PROP_ATOM(NET_WM_STATE_TOGGLE))) /* an invalid action was passed to the client message, ignore it */ return; @@@ -3594,67 -3638,105 +3588,67 @@@ if (!state) continue; /* if toggling, then pick whether we're adding or removing */ - if (action == prop_atoms.net_wm_state_toggle) { - if (state == prop_atoms.net_wm_state_modal) - action = modal ? prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_maximized_vert) - action = self->max_vert ? prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_maximized_horz) - action = self->max_horz ? prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_shaded) - action = shaded ? prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_skip_taskbar) - action = self->skip_taskbar ? - prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_skip_pager) - action = self->skip_pager ? - prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_hidden) - action = self->iconic ? - prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_fullscreen) - action = fullscreen ? - prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_above) - action = self->above ? prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_below) - action = self->below ? prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.net_wm_state_demands_attention) - action = self->demands_attention ? - prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; - else if (state == prop_atoms.ob_wm_state_undecorated) - action = undecorated ? prop_atoms.net_wm_state_remove : - prop_atoms.net_wm_state_add; + if (action == OBT_PROP_ATOM(NET_WM_STATE_TOGGLE)) { + if (state == OBT_PROP_ATOM(NET_WM_STATE_MODAL)) + value = modal; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT)) + value = self->max_vert; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ)) + value = self->max_horz; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_SHADED)) + value = shaded; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_SKIP_TASKBAR)) + value = self->skip_taskbar; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_SKIP_PAGER)) + value = self->skip_pager; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_HIDDEN)) + value = self->iconic; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_FULLSCREEN)) + value = fullscreen; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_ABOVE)) + value = self->above; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_BELOW)) + value = self->below; + else if (state == OBT_PROP_ATOM(NET_WM_STATE_DEMANDS_ATTENTION)) + value = self->demands_attention; + else if (state == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED)) + value = undecorated; + action = value ? OBT_PROP_ATOM(NET_WM_STATE_REMOVE) : + OBT_PROP_ATOM(NET_WM_STATE_ADD); } - if (action == prop_atoms.net_wm_state_add) { - if (state == prop_atoms.net_wm_state_modal) { - modal = TRUE; - } else if (state == prop_atoms.net_wm_state_maximized_vert) { - max_vert = TRUE; - } else if (state == prop_atoms.net_wm_state_maximized_horz) { - max_horz = TRUE; - } else if (state == prop_atoms.net_wm_state_shaded) { - shaded = TRUE; - } else if (state == prop_atoms.net_wm_state_skip_taskbar) { - self->skip_taskbar = TRUE; - } else if (state == prop_atoms.net_wm_state_skip_pager) { - self->skip_pager = TRUE; - } else if (state == prop_atoms.net_wm_state_hidden) { - iconic = TRUE; - } else if (state == prop_atoms.net_wm_state_fullscreen) { - fullscreen = TRUE; - } else if (state == prop_atoms.net_wm_state_above) { - above = TRUE; + value = action == OBT_PROP_ATOM(NET_WM_STATE_ADD); + if (state == OBT_PROP_ATOM(NET_WM_STATE_MODAL)) { + modal = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT)) { + max_vert = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ)) { + max_horz = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_SHADED)) { + shaded = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_SKIP_TASKBAR)) { + self->skip_taskbar = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_SKIP_PAGER)) { + self->skip_pager = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_HIDDEN)) { + iconic = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_FULLSCREEN)) { + fullscreen = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_ABOVE)) { + above = value; + /* only unset below when setting above, otherwise you can't get to + the normal layer */ + if (value) below = FALSE; - } else if (state == prop_atoms.net_wm_state_below) { + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_BELOW)) { + /* and vice versa */ + if (value) above = FALSE; - below = TRUE; - } else if (state == prop_atoms.net_wm_state_demands_attention) { - demands_attention = TRUE; - } else if (state == prop_atoms.ob_wm_state_undecorated) { - undecorated = TRUE; - } - - } else { /* action == prop_atoms.net_wm_state_remove */ - if (state == prop_atoms.net_wm_state_modal) { - modal = FALSE; - } else if (state == prop_atoms.net_wm_state_maximized_vert) { - max_vert = FALSE; - } else if (state == prop_atoms.net_wm_state_maximized_horz) { - max_horz = FALSE; - } else if (state == prop_atoms.net_wm_state_shaded) { - shaded = FALSE; - } else if (state == prop_atoms.net_wm_state_skip_taskbar) { - self->skip_taskbar = FALSE; - } else if (state == prop_atoms.net_wm_state_skip_pager) { - self->skip_pager = FALSE; - } else if (state == prop_atoms.net_wm_state_hidden) { - iconic = FALSE; - } else if (state == prop_atoms.net_wm_state_fullscreen) { - fullscreen = FALSE; - } else if (state == prop_atoms.net_wm_state_above) { - above = FALSE; - } else if (state == prop_atoms.net_wm_state_below) { - below = FALSE; - } else if (state == prop_atoms.net_wm_state_demands_attention) { - demands_attention = FALSE; - } else if (state == prop_atoms.ob_wm_state_undecorated) { - undecorated = FALSE; - } + below = value; + } else if (state == OBT_PROP_ATOM(NET_WM_STATE_DEMANDS_ATTENTION)){ + demands_attention = value; + } else if (state == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED)) { + undecorated = value; } } @@@ -3744,12 -3826,12 +3738,12 @@@ gboolean client_focus(ObClient *self if (!client_can_focus(self)) { ob_debug_type(OB_DEBUG_FOCUS, - "Client %s can't be focused\n", self->title); + "Client %s can't be focused", self->title); return FALSE; } ob_debug_type(OB_DEBUG_FOCUS, - "Focusing client \"%s\" (0x%x) at time %u\n", + "Focusing client \"%s\" (0x%x) at time %u", self->title, self->window, event_curtime); /* if using focus_delay, stop the timer now so that focus doesn't @@@ -3758,35 -3840,35 +3752,35 @@@ event_cancel_all_key_grabs(); - xerror_set_ignore(TRUE); - xerror_occured = FALSE; + obt_display_ignore_errors(TRUE); if (self->can_focus) { /* This can cause a BadMatch error with CurrentTime, or if an app passed in a bad time for _NET_WM_ACTIVE_WINDOW. */ - XSetInputFocus(ob_display, self->window, RevertToPointerRoot, + XSetInputFocus(obt_display, self->window, RevertToPointerRoot, event_curtime); } if (self->focus_notify) { XEvent ce; ce.xclient.type = ClientMessage; - ce.xclient.message_type = prop_atoms.wm_protocols; - ce.xclient.display = ob_display; + ce.xclient.message_type = OBT_PROP_ATOM(WM_PROTOCOLS); + ce.xclient.display = obt_display; ce.xclient.window = self->window; ce.xclient.format = 32; - ce.xclient.data.l[0] = prop_atoms.wm_take_focus; + ce.xclient.data.l[0] = OBT_PROP_ATOM(WM_TAKE_FOCUS); ce.xclient.data.l[1] = event_curtime; ce.xclient.data.l[2] = 0l; ce.xclient.data.l[3] = 0l; ce.xclient.data.l[4] = 0l; - XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce); + XSendEvent(obt_display, self->window, FALSE, NoEventMask, &ce); } - xerror_set_ignore(FALSE); + obt_display_ignore_errors(FALSE); - ob_debug_type(OB_DEBUG_FOCUS, "Error focusing? %d\n", xerror_occured); - return !xerror_occured; + ob_debug_type(OB_DEBUG_FOCUS, "Error focusing? %d", + obt_display_error_occured); + return !obt_display_error_occured; } static void client_present(ObClient *self, gboolean here, gboolean raise, @@@ -3903,9 -3985,6 +3897,9 @@@ void client_set_undecorated(ObClient *s self->undecorated = undecorated; client_setup_decor_and_functions(self, TRUE); client_change_state(self); /* reflect this in the state hints */ + + hooks_queue((undecorated ? + OB_HOOK_WIN_UNDECORATED : OB_HOOK_WIN_DECORATED), self); } } @@@ -4097,15 -4176,15 +4091,15 @@@ static void detect_edge(Rect area, ObDi g_assert_not_reached(); } - ob_debug("my head %d size %d\n", my_head, my_size); - ob_debug("head %d tail %d dest %d\n", head, tail, *dest); + ob_debug("my head %d size %d", my_head, my_size); + ob_debug("head %d tail %d dest %d", head, tail, *dest); if (!skip_head) { - ob_debug("using near edge %d\n", head); + ob_debug("using near edge %d", head); *dest = head; *near_edge = TRUE; } else if (!skip_tail) { - ob_debug("using far edge %d\n", tail); + ob_debug("using far edge %d", tail); *dest = tail; *near_edge = FALSE; } @@@ -4170,7 -4249,7 +4164,7 @@@ void client_find_edge_directional(ObCli cur->desktop != screen_desktop) continue; - ob_debug("trying window %s\n", cur->title); + ob_debug("trying window %s", cur->title); detect_edge(cur->frame->area, dir, my_head, my_size, my_edge_start, my_edge_size, dest, near_edge); @@@ -4291,10 -4370,10 +4285,10 @@@ void client_find_resize_directional(ObC g_assert_not_reached(); } - ob_debug("head %d dir %d\n", head, dir); + ob_debug("head %d dir %d", head, dir); client_find_edge_directional(self, dir, head, 1, e_start, e_size, &e, &near); - ob_debug("edge %d\n", e); + ob_debug("edge %d", e); *x = self->frame->area.x; *y = self->frame->area.y; *w = self->frame->area.width; diff --combined openbox/config.h index 8a01ee1f,69fe6ff4..cc5fa89a --- a/openbox/config.h +++ b/openbox/config.h @@@ -27,10 -27,11 +27,10 @@@ #include "geom.h" #include "moveresize.h" #include "render/render.h" +#include "obt/parse.h" #include -struct _ObParseInst; - typedef struct _ObAppSettings ObAppSettings; struct _ObAppSettings @@@ -187,15 -188,14 +187,14 @@@ extern GSList *config_menu_files /*! Per app settings */ extern GSList *config_per_app_settings; -void config_startup(struct _ObParseInst *i); -void config_shutdown(); +void config_startup(ObtParseInst *i); +void config_shutdown(void); /*! Create an ObAppSettings structure with the default values */ -ObAppSettings* config_create_app_settings(); +ObAppSettings* config_create_app_settings(void); /*! Copies any settings in src to dest, if they are their default value in src. */ void config_app_settings_copy_non_defaults(const ObAppSettings *src, ObAppSettings *dest); - #endif diff --combined openbox/event.c index a0ce223a,3abaa675..aca69cc3 --- a/openbox/event.c +++ b/openbox/event.c @@@ -24,6 -24,8 +24,6 @@@ #include "dock.h" #include "actions.h" #include "client.h" -#include "xerror.h" -#include "prop.h" #include "config.h" #include "screen.h" #include "frame.h" @@@ -32,17 -34,17 +32,17 @@@ #include "prompt.h" #include "menuframe.h" #include "keyboard.h" -#include "modkeys.h" #include "mouse.h" -#include "mainloop.h" +#include "hooks.h" #include "focus.h" #include "focus_cycle.h" #include "moveresize.h" #include "group.h" #include "stacking.h" -#include "extensions.h" -#include "translate.h" #include "ping.h" +#include "obt/display.h" +#include "obt/prop.h" +#include "obt/keyboard.h" #include #include @@@ -85,8 -87,8 +85,8 @@@ typedef struc static void event_process(const XEvent *e, gpointer data); static void event_handle_root(XEvent *e); -static gboolean event_handle_menu_keyboard(XEvent *e); -static gboolean event_handle_menu(XEvent *e); +static gboolean event_handle_menu_input(XEvent *e); +static void event_handle_menu(ObMenuFrame *frame, XEvent *e); static gboolean event_handle_prompt(ObPrompt *p, XEvent *e); static void event_handle_dock(ObDock *s, XEvent *e); static void event_handle_dockapp(ObDockApp *app, XEvent *e); @@@ -123,9 -125,9 +123,9 @@@ static void ice_watch(IceConn conn, Ice if (opening) { fd = IceConnectionNumber(conn); - ob_main_loop_fd_add(ob_main_loop, fd, ice_handler, conn, NULL); + obt_main_loop_fd_add(ob_main_loop, fd, ice_handler, conn, NULL); } else { - ob_main_loop_fd_remove(ob_main_loop, fd); + obt_main_loop_fd_remove(ob_main_loop, fd); fd = -1; } } @@@ -135,7 -137,7 +135,7 @@@ void event_startup(gboolean reconfig { if (reconfig) return; - ob_main_loop_x_add(ob_main_loop, event_process, NULL, NULL); + obt_main_loop_x_add(ob_main_loop, event_process, NULL, NULL); #ifdef USE_SM IceAddConnectionWatch(ice_watch, NULL); @@@ -162,15 -164,9 +162,15 @@@ static Window event_get_window(XEvent * /* pick a window */ switch (e->type) { case SelectionClear: - window = RootWindow(ob_display, ob_screen); + window = obt_root(ob_screen); + break; + case CreateNotify: + window = e->xcreatewindow.window; break; case MapRequest: + window = e->xmaprequest.window; + break; + case MapNotify: window = e->xmap.window; break; case UnmapNotify: @@@ -187,9 -183,7 +187,9 @@@ break; default: #ifdef XKB - if (extensions_xkb && e->type == extensions_xkb_event_basep) { + if (obt_display_extension_xkb && + e->type == obt_display_extension_xkb_basep) + { switch (((XkbAnyEvent*)e)->xkb_type) { case XkbBellNotify: window = ((XkbBellNotifyEvent*)e)->window; @@@ -199,8 -193,8 +199,8 @@@ } else #endif #ifdef SYNC - if (extensions_sync && - e->type == extensions_sync_event_basep + XSyncAlarmNotify) + if (obt_display_extension_sync && + e->type == obt_display_extension_sync_basep + XSyncAlarmNotify) { window = None; } else @@@ -238,8 -232,8 +238,8 @@@ static void event_set_curtime(XEvent *e break; default: #ifdef SYNC - if (extensions_sync && - e->type == extensions_sync_event_basep + XSyncAlarmNotify) + if (obt_display_extension_sync && + e->type == obt_display_extension_sync_basep + XSyncAlarmNotify) { t = ((XSyncAlarmNotifyEvent*)e)->time; } @@@ -267,34 -261,34 +267,34 @@@ static void event_hack_mods(XEvent *e switch (e->type) { case ButtonPress: case ButtonRelease: - e->xbutton.state = modkeys_only_modifier_masks(e->xbutton.state); + e->xbutton.state = obt_keyboard_only_modmasks(e->xbutton.state); break; case KeyPress: - e->xkey.state = modkeys_only_modifier_masks(e->xkey.state); + e->xkey.state = obt_keyboard_only_modmasks(e->xkey.state); break; case KeyRelease: #ifdef XKB /* If XKB is present, then the modifiers are all strange from its magic. Our X core protocol stuff won't work, so we use this to find what the modifier state is instead. */ - if (XkbGetState(ob_display, XkbUseCoreKbd, &xkb_state) == Success) + if (XkbGetState(obt_display, XkbUseCoreKbd, &xkb_state) == Success) e->xkey.state = - modkeys_only_modifier_masks(xkb_state.compat_state); + obt_keyboard_only_modmasks(xkb_state.compat_state); else #endif { - e->xkey.state = modkeys_only_modifier_masks(e->xkey.state); + e->xkey.state = obt_keyboard_only_modmasks(e->xkey.state); /* remove from the state the mask of the modifier key being released, if it is a modifier key being released that is */ - e->xkey.state &= ~modkeys_keycode_to_mask(e->xkey.keycode); + e->xkey.state &= ~obt_keyboard_keycode_to_modmask(e->xkey.keycode); } break; case MotionNotify: - e->xmotion.state = modkeys_only_modifier_masks(e->xmotion.state); + e->xmotion.state = obt_keyboard_only_modmasks(e->xmotion.state); /* compress events */ { XEvent ce; - while (XCheckTypedWindowEvent(ob_display, e->xmotion.window, + while (XCheckTypedWindowEvent(obt_display, e->xmotion.window, e->type, &ce)) { e->xmotion.x = ce.xmotion.x; e->xmotion.y = ce.xmotion.y; @@@ -324,7 -318,7 +324,7 @@@ static gboolean wanted_focusevent(XEven /* These are the ones we want.. */ - if (win == RootWindow(ob_display, ob_screen)) { + if (win == obt_root(ob_screen)) { /* If looking for a focus in on a client, then always return FALSE for focus in's to the root window */ if (in_client_only) @@@ -345,7 -339,7 +345,7 @@@ but has disappeared. */ if (in_client_only) { - ObWindow *w = g_hash_table_lookup(window_map, &e->xfocus.window); + ObWindow *w = window_find(e->xfocus.window); if (!w || !WINDOW_IS_CLIENT(w)) return FALSE; } @@@ -378,7 -372,7 +378,7 @@@ return FALSE; /* Focus left the root window revertedto state */ - if (win == RootWindow(ob_display, ob_screen)) + if (win == obt_root(ob_screen)) return FALSE; /* These are the ones we want.. */ @@@ -434,7 -428,7 +434,7 @@@ static void print_focusevent(XEvent *e g_assert(modestr); g_assert(detailstr); - ob_debug_type(OB_DEBUG_FOCUS, "Focus%s 0x%x mode=%s detail=%s\n", + ob_debug_type(OB_DEBUG_FOCUS, "Focus%s 0x%x mode=%s detail=%s", (e->xfocus.type == FocusIn ? "In" : "Out"), win, modestr, detailstr); @@@ -460,15 -454,13 +460,15 @@@ static gboolean event_ignore(XEvent *e static void event_process(const XEvent *ec, gpointer data) { + XEvent ee, *e; + ObEventData *ed = data; + Window window; ObClient *client = NULL; ObDock *dock = NULL; ObDockApp *dockapp = NULL; ObWindow *obwin = NULL; - XEvent ee, *e; - ObEventData *ed = data; + ObMenuFrame *menu = NULL; ObPrompt *prompt = NULL; /* make a copy we can mangle */ @@@ -476,31 -468,31 +476,31 @@@ e = ⅇ window = event_get_window(e); - if ((obwin = g_hash_table_lookup(window_map, &window))) { + if (window == obt_root(ob_screen)) + /* don't do any lookups, waste of cpu */; + else if ((obwin = window_find(window))) { switch (obwin->type) { - case Window_Dock: + case OB_WINDOW_CLASS_DOCK: dock = WINDOW_AS_DOCK(obwin); break; - case Window_DockApp: - dockapp = WINDOW_AS_DOCKAPP(obwin); - break; - case Window_Client: + case OB_WINDOW_CLASS_CLIENT: client = WINDOW_AS_CLIENT(obwin); /* events on clients can be events on prompt windows too */ prompt = client->prompt; break; - case Window_Menu: - /* not to be used for events */ - g_assert_not_reached(); + case OB_WINDOW_CLASS_MENUFRAME: + menu = WINDOW_AS_MENUFRAME(obwin); break; - case Window_Internal: + case OB_WINDOW_CLASS_INTERNAL: /* we don't do anything with events directly on these windows */ break; - case Window_Prompt: + case OB_WINDOW_CLASS_PROMPT: prompt = WINDOW_AS_PROMPT(obwin); break; } } + else + dockapp = dock_find_dockapp(window); event_set_curtime(e); event_curserial = e->xany.serial; @@@ -514,7 -506,12 +514,7 @@@ /* deal with it in the kernel */ - if (menu_frame_visible && - (e->type == EnterNotify || e->type == LeaveNotify)) - { - /* crossing events for menu */ - event_handle_menu(e); - } else if (e->type == FocusIn) { + if (e->type == FocusIn) { if (client && e->xfocus.detail == NotifyInferior) { @@@ -539,7 -536,7 +539,7 @@@ XEvent ce; ob_debug_type(OB_DEBUG_FOCUS, - "Focus went to root or pointer root/none\n"); + "Focus went to root or pointer root/none"); if (e->xfocus.detail == NotifyInferior || e->xfocus.detail == NotifyNonlinear) @@@ -560,12 -557,12 +560,12 @@@ But if the other focus in is something like PointerRoot then we still want to fall back. */ - if (XCheckIfEvent(ob_display, &ce, event_look_for_focusin_client, + if (XCheckIfEvent(obt_display, &ce, event_look_for_focusin_client, NULL)) { - XPutBackEvent(ob_display, &ce); + XPutBackEvent(obt_display, &ce); ob_debug_type(OB_DEBUG_FOCUS, - " but another FocusIn is coming\n"); + " but another FocusIn is coming"); } else { /* Focus has been reverted. @@@ -581,7 -578,7 +581,7 @@@ else if (!client) { ob_debug_type(OB_DEBUG_FOCUS, - "Focus went to a window that is already gone\n"); + "Focus went to a window that is already gone"); /* If you send focus to a window and then it disappears, you can get the FocusIn for it, after it is unmanaged. @@@ -600,25 -597,25 +600,25 @@@ XEvent ce; /* Look for the followup FocusIn */ - if (!XCheckIfEvent(ob_display, &ce, event_look_for_focusin, NULL)) { + if (!XCheckIfEvent(obt_display, &ce, event_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. */ Window win, root; gint i; guint u; - xerror_set_ignore(TRUE); - if (XGetInputFocus(ob_display, &win, &i) != 0 && - XGetGeometry(ob_display, win, &root, &i,&i,&u,&u,&u,&u) != 0 && - root != RootWindow(ob_display, ob_screen)) + obt_display_ignore_errors(TRUE); + if (XGetInputFocus(obt_display, &win, &i) && + XGetGeometry(obt_display, win, &root, &i,&i,&u,&u,&u,&u) && + root != obt_root(ob_screen)) { ob_debug_type(OB_DEBUG_FOCUS, - "Focus went to another screen !\n"); + "Focus went to another screen !"); focus_left_screen = TRUE; } else ob_debug_type(OB_DEBUG_FOCUS, - "Focus went to a black hole !\n"); - xerror_set_ignore(FALSE); + "Focus went to a black hole !"); + obt_display_ignore_errors(FALSE); /* nothing is focused */ focus_set_client(NULL); } else { @@@ -629,7 -626,7 +629,7 @@@ /* The FocusIn was ignored, this means it was on a window that isn't a client. */ ob_debug_type(OB_DEBUG_FOCUS, - "Focus went to an unmanaged window 0x%x !\n", + "Focus went to an unmanaged window 0x%x !", ce.xfocus.window); focus_fallback(TRUE, config_focus_under_mouse, TRUE, TRUE); } @@@ -647,27 -644,24 +647,27 @@@ event_handle_dockapp(dockapp, e); else if (dock) event_handle_dock(dock, e); - else if (window == RootWindow(ob_display, ob_screen)) + else if (menu) + event_handle_menu(menu, e); + else if (window == obt_root(ob_screen)) event_handle_root(e); else if (e->type == MapRequest) - client_manage(window, NULL); + window_manage(window); else if (e->type == MappingNotify) { /* keyboard layout changes for modifier mapping changes. reload the modifier map, and rebind all the key bindings as appropriate */ - ob_debug("Kepboard map changed. Reloading keyboard bindings.\n"); + ob_debug("Kepboard map changed. Reloading keyboard bindings."); ob_set_state(OB_STATE_RECONFIGURING); - modkeys_shutdown(TRUE); - modkeys_startup(TRUE); + obt_keyboard_reload(); keyboard_rebind(); ob_set_state(OB_STATE_RUNNING); } else if (e->type == ClientMessage) { /* This is for _NET_WM_REQUEST_FRAME_EXTENTS messages. They come for windows that are not managed yet. */ - if (e->xclient.message_type == prop_atoms.net_request_frame_extents) { + if (e->xclient.message_type == + OBT_PROP_ATOM(NET_REQUEST_FRAME_EXTENTS)) + { /* Pretend to manage the client, getting information used to determine its decorations */ ObClient *c = client_fake_manage(e->xclient.window); @@@ -678,8 -672,8 +678,8 @@@ vals[1] = c->frame->size.right; vals[2] = c->frame->size.top; vals[3] = c->frame->size.bottom; - PROP_SETA32(e->xclient.window, net_frame_extents, - cardinal, vals, 4); + OBT_PROP_SETA32(e->xclient.window, NET_FRAME_EXTENTS, + CARDINAL, vals, 4); /* Free the pretend client */ client_fake_unmanage(c); @@@ -700,14 -694,14 +700,14 @@@ /* we are not to be held responsible if someone sends us an invalid request! */ - xerror_set_ignore(TRUE); - XConfigureWindow(ob_display, window, + obt_display_ignore_errors(TRUE); + XConfigureWindow(obt_display, window, e->xconfigurerequest.value_mask, &xwc); - xerror_set_ignore(FALSE); + obt_display_ignore_errors(FALSE); } #ifdef SYNC - else if (extensions_sync && - e->type == extensions_sync_event_basep + XSyncAlarmNotify) + else if (obt_display_extension_sync && + e->type == obt_display_extension_sync_basep + XSyncAlarmNotify) { XSyncAlarmNotifyEvent *se = (XSyncAlarmNotifyEvent*)e; if (se->alarm == moveresize_alarm && moveresize_in_progress) @@@ -720,7 -714,7 +720,7 @@@ else if (e->type == ButtonPress || e->type == ButtonRelease) { /* If the button press was on some non-root window, or was physically on the root window, then process it */ - if (window != RootWindow(ob_display, ob_screen) || + if (window != obt_root(ob_screen) || e->xbutton.subwindow == None) { event_handle_user_input(client, e); @@@ -730,7 -724,7 +730,7 @@@ else { ObWindow *w; - if ((w = g_hash_table_lookup(window_map, &e->xbutton.subwindow)) && + if ((w = window_find(e->xbutton.subwindow)) && WINDOW_IS_INTERNAL(w)) { event_handle_user_input(client, e); @@@ -741,11 -735,6 +741,11 @@@ e->type == MotionNotify) event_handle_user_input(client, e); + XFlush(obt_display); + + /* run all the hooks at once */ + hooks_run_queue(); + /* if something happens and it's not from an XEvent, then we don't know the time */ event_curtime = CurrentTime; @@@ -758,7 -747,7 +758,7 @@@ static void event_handle_root(XEvent *e switch(e->type) { case SelectionClear: - ob_debug("Another WM has requested to replace us. Exiting.\n"); + ob_debug("Another WM has requested to replace us. Exiting."); ob_exit_replace(); break; @@@ -766,41 -755,41 +766,41 @@@ if (e->xclient.format != 32) break; msgtype = e->xclient.message_type; - if (msgtype == prop_atoms.net_current_desktop) { + if (msgtype == OBT_PROP_ATOM(NET_CURRENT_DESKTOP)) { guint d = e->xclient.data.l[0]; if (d < screen_num_desktops) { event_curtime = e->xclient.data.l[1]; if (event_curtime == 0) ob_debug_type(OB_DEBUG_APP_BUGS, "_NET_CURRENT_DESKTOP message is missing " - "a timestamp\n"); + "a timestamp"); screen_set_desktop(d, TRUE); } - } else if (msgtype == prop_atoms.net_number_of_desktops) { + } else if (msgtype == OBT_PROP_ATOM(NET_NUMBER_OF_DESKTOPS)) { guint d = e->xclient.data.l[0]; if (d > 0 && d <= 1000) screen_set_num_desktops(d); - } else if (msgtype == prop_atoms.net_showing_desktop) { + } else if (msgtype == OBT_PROP_ATOM(NET_SHOWING_DESKTOP)) { screen_show_desktop(e->xclient.data.l[0] != 0, NULL); - } else if (msgtype == prop_atoms.ob_control) { - ob_debug("OB_CONTROL: %d\n", e->xclient.data.l[0]); + } else if (msgtype == OBT_PROP_ATOM(OB_CONTROL)) { + ob_debug("OB_CONTROL: %d", e->xclient.data.l[0]); if (e->xclient.data.l[0] == 1) ob_reconfigure(); else if (e->xclient.data.l[0] == 2) ob_restart(); else if (e->xclient.data.l[0] == 3) ob_exit(0); - } else if (msgtype == prop_atoms.wm_protocols) { - if ((Atom)e->xclient.data.l[0] == prop_atoms.net_wm_ping) + } else if (msgtype == OBT_PROP_ATOM(WM_PROTOCOLS)) { + if ((Atom)e->xclient.data.l[0] == OBT_PROP_ATOM(NET_WM_PING)) ping_got_pong(e->xclient.data.l[1]); } break; case PropertyNotify: - if (e->xproperty.atom == prop_atoms.net_desktop_names) { - ob_debug("UPDATE DESKTOP NAMES\n"); + if (e->xproperty.atom == OBT_PROP_ATOM(NET_DESKTOP_NAMES)) { + ob_debug("UPDATE DESKTOP NAMES"); screen_update_desktop_names(); } - else if (e->xproperty.atom == prop_atoms.net_desktop_layout) + else if (e->xproperty.atom == OBT_PROP_ATOM(NET_DESKTOP_LAYOUT)) screen_update_layout(); break; case ConfigureNotify: @@@ -828,17 -817,17 +828,17 @@@ void event_enter_client(ObClient *clien if (config_focus_delay) { ObFocusDelayData *data; - ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func); + obt_main_loop_timeout_remove(ob_main_loop, focus_delay_func); data = g_new(ObFocusDelayData, 1); data->client = client; data->time = event_curtime; data->serial = event_curserial; - ob_main_loop_timeout_add(ob_main_loop, - config_focus_delay * 1000, - focus_delay_func, - data, focus_delay_cmp, focus_delay_dest); + obt_main_loop_timeout_add(ob_main_loop, + config_focus_delay * 1000, + focus_delay_func, + data, focus_delay_cmp, focus_delay_dest); } else { ObFocusDelayData data; data.client = client; @@@ -888,12 -877,12 +888,12 @@@ static void compress_client_message_eve Atom msgtype) { /* compress changes into a single change */ - while (XCheckTypedWindowEvent(ob_display, window, e->type, ce)) { + while (XCheckTypedWindowEvent(obt_display, window, e->type, ce)) { /* XXX: it would be nice to compress ALL messages of a type, not just messages in a row without other message types between. */ if (ce->xclient.message_type != msgtype) { - XPutBackEvent(ob_display, ce); + XPutBackEvent(obt_display, ce); break; } e->xclient = ce->xclient; @@@ -1012,7 -1001,7 +1012,7 @@@ static void event_handle_client(ObClien event_end_ignore_all_enters(event_start_ignore_all_enters()); ob_debug_type(OB_DEBUG_FOCUS, - "%sNotify mode %d detail %d on %lx\n", + "%sNotify mode %d detail %d on %lx", (e->type == EnterNotify ? "Enter" : "Leave"), e->xcrossing.mode, e->xcrossing.detail, (client?client->window:0)); @@@ -1024,9 -1013,9 +1024,9 @@@ delay is up */ e->xcrossing.detail != NotifyInferior) { - ob_main_loop_timeout_remove_data(ob_main_loop, - focus_delay_func, - client, FALSE); + obt_main_loop_timeout_remove_data(ob_main_loop, + focus_delay_func, + client, FALSE); } break; default: @@@ -1057,7 -1046,7 +1057,7 @@@ { ob_debug_type(OB_DEBUG_FOCUS, "%sNotify mode %d detail %d serial %lu on %lx " - "IGNORED\n", + "IGNORED", (e->type == EnterNotify ? "Enter" : "Leave"), e->xcrossing.mode, e->xcrossing.detail, @@@ -1067,7 -1056,7 +1067,7 @@@ else { ob_debug_type(OB_DEBUG_FOCUS, "%sNotify mode %d detail %d serial %lu on %lx, " - "focusing window\n", + "focusing window", (e->type == EnterNotify ? "Enter" : "Leave"), e->xcrossing.mode, e->xcrossing.detail, @@@ -1107,10 -1096,10 +1107,10 @@@ RECT_TO_DIMS(client->area, x, y, w, h); ob_debug("ConfigureRequest for \"%s\" desktop %d wmstate %d " - "visible %d\n" - " x %d y %d w %d h %d b %d\n", + "visible %d", client->title, - screen_desktop, client->wmstate, client->frame->visible, + screen_desktop, client->wmstate, client->frame->visible); + ob_debug(" x %d y %d w %d h %d b %d", x, y, w, h, client->border_width); if (e->xconfigurerequest.value_mask & CWBorderWidth) @@@ -1125,7 -1114,6 +1125,6 @@@ move = TRUE; } - if (e->xconfigurerequest.value_mask & CWStackMode) { ObClient *sibling = NULL; gulong ignore_start; @@@ -1134,7 -1122,8 +1133,7 @@@ /* get the sibling */ if (e->xconfigurerequest.value_mask & CWSibling) { ObWindow *win; - win = g_hash_table_lookup(window_map, - &e->xconfigurerequest.above); + win = window_find(e->xconfigurerequest.above); if (win && WINDOW_IS_CLIENT(win) && WINDOW_AS_CLIENT(win) != client) { @@@ -1188,7 -1177,7 +1187,7 @@@ } ob_debug("ConfigureRequest x(%d) %d y(%d) %d w(%d) %d h(%d) %d " - "move %d resize %d\n", + "move %d resize %d", e->xconfigurerequest.value_mask & CWX, x, e->xconfigurerequest.value_mask & CWY, y, e->xconfigurerequest.value_mask & CWWidth, w, @@@ -1214,7 -1203,7 +1213,7 @@@ ob_debug_type(OB_DEBUG_APP_BUGS, "Application %s is trying to move via " "ConfigureRequest to it's root window position " - "but it is not using StaticGravity\n", + "but it is not using StaticGravity", client->title); /* don't move it */ x = client->area.x; @@@ -1241,25 -1230,25 +1240,25 @@@ client_find_onscreen(client, &x, &y, w, h, FALSE); - ob_debug("Granting ConfigureRequest x %d y %d w %d h %d\n", + ob_debug("Granting ConfigureRequest x %d y %d w %d h %d", x, y, w, h); client_configure(client, x, y, w, h, FALSE, TRUE, TRUE); } break; } case UnmapNotify: + ob_debug("UnmapNotify for window 0x%x eventwin 0x%x sendevent %d " + "ignores left %d", + 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: - ob_debug("DestroyNotify for window 0x%x\n", client->window); + ob_debug("DestroyNotify for window 0x%x", client->window); client_unmanage(client); break; case ReparentNotify: @@@ -1275,13 -1264,13 +1274,13 @@@ /* we don't want the reparent event, put it back on the stack for the X server to deal with after we unmanage the window */ - XPutBackEvent(ob_display, e); + XPutBackEvent(obt_display, e); - ob_debug("ReparentNotify for window 0x%x\n", client->window); + ob_debug("ReparentNotify for window 0x%x", client->window); client_unmanage(client); break; case MapRequest: - ob_debug("MapRequest for 0x%lx\n", client->window); + ob_debug("MapRequest for 0x%lx", client->window); if (!client->iconic) break; /* this normally doesn't happen, but if it does, we don't want it! it can happen now when the window is on @@@ -1296,20 -1285,20 +1295,20 @@@ if (e->xclient.format != 32) return; msgtype = e->xclient.message_type; - if (msgtype == prop_atoms.wm_change_state) { + if (msgtype == OBT_PROP_ATOM(WM_CHANGE_STATE)) { compress_client_message_event(e, &ce, client->window, msgtype); client_set_wm_state(client, e->xclient.data.l[0]); - } else if (msgtype == prop_atoms.net_wm_desktop) { + } else if (msgtype == OBT_PROP_ATOM(NET_WM_DESKTOP)) { compress_client_message_event(e, &ce, client->window, msgtype); if ((unsigned)e->xclient.data.l[0] < screen_num_desktops || (unsigned)e->xclient.data.l[0] == DESKTOP_ALL) client_set_desktop(client, (unsigned)e->xclient.data.l[0], FALSE, FALSE); - } else if (msgtype == prop_atoms.net_wm_state) { + } else if (msgtype == OBT_PROP_ATOM(NET_WM_STATE)) { gulong ignore_start; /* can't compress these */ - ob_debug("net_wm_state %s %ld %ld for 0x%lx\n", + ob_debug("net_wm_state %s %ld %ld for 0x%lx", (e->xclient.data.l[0] == 0 ? "Remove" : e->xclient.data.l[0] == 1 ? "Add" : e->xclient.data.l[0] == 2 ? "Toggle" : "INVALID"), @@@ -1323,11 -1312,11 +1322,11 @@@ e->xclient.data.l[1], e->xclient.data.l[2]); if (!config_focus_under_mouse) event_end_ignore_all_enters(ignore_start); - } else if (msgtype == prop_atoms.net_close_window) { - ob_debug("net_close_window for 0x%lx\n", client->window); + } else if (msgtype == OBT_PROP_ATOM(NET_CLOSE_WINDOW)) { + ob_debug("net_close_window for 0x%lx", client->window); client_close(client); - } else if (msgtype == prop_atoms.net_active_window) { - ob_debug("net_active_window for 0x%lx source=%s\n", + } else if (msgtype == OBT_PROP_ATOM(NET_ACTIVE_WINDOW)) { + ob_debug("net_active_window for 0x%lx source=%s", client->window, (e->xclient.data.l[0] == 0 ? "unknown" : (e->xclient.data.l[0] == 1 ? "application" : @@@ -1341,50 -1330,50 +1340,50 @@@ if (e->xclient.data.l[1] == 0) ob_debug_type(OB_DEBUG_APP_BUGS, "_NET_ACTIVE_WINDOW message for window %s is" - " missing a timestamp\n", client->title); + " missing a timestamp", client->title); } else ob_debug_type(OB_DEBUG_APP_BUGS, "_NET_ACTIVE_WINDOW message for window %s is " - "missing source indication\n"); + "missing source indication"); client_activate(client, TRUE, TRUE, TRUE, (e->xclient.data.l[0] == 0 || e->xclient.data.l[0] == 2)); - } else if (msgtype == prop_atoms.net_wm_moveresize) { - ob_debug("net_wm_moveresize for 0x%lx direction %d\n", + } else if (msgtype == OBT_PROP_ATOM(NET_WM_MOVERESIZE)) { + ob_debug("net_wm_moveresize for 0x%lx direction %d", client->window, e->xclient.data.l[2]); if ((Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_topleft || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPLEFT) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_top || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOP) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_topright || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPRIGHT) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_right || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_RIGHT) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_right || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_RIGHT) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_bottomright || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_bottom || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOM) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_bottomleft || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_left || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_LEFT) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_move || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_size_keyboard || + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_KEYBOARD) || (Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_move_keyboard) { - + OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE_KEYBOARD)) + { moveresize_start(client, e->xclient.data.l[0], e->xclient.data.l[1], e->xclient.data.l[3], e->xclient.data.l[2]); } else if ((Atom)e->xclient.data.l[2] == - prop_atoms.net_wm_moveresize_cancel) + OBT_PROP_ATOM(NET_WM_MOVERESIZE_CANCEL)) moveresize_end(TRUE); - } else if (msgtype == prop_atoms.net_moveresize_window) { + } else if (msgtype == OBT_PROP_ATOM(NET_MOVERESIZE_WINDOW)) { gint ograv, x, y, w, h; ograv = client->gravity; @@@ -1422,7 -1411,7 +1421,7 @@@ else h = client->area.height; - ob_debug("MOVERESIZE x %d %d y %d %d (gravity %d)\n", + ob_debug("MOVERESIZE x %d %d y %d %d (gravity %d)", e->xclient.data.l[0] & 1 << 8, x, e->xclient.data.l[0] & 1 << 9, y, client->gravity); @@@ -1432,16 -1421,17 +1431,16 @@@ client_configure(client, x, y, w, h, FALSE, TRUE, FALSE); client->gravity = ograv; - } else if (msgtype == prop_atoms.net_restack_window) { + } else if (msgtype == OBT_PROP_ATOM(NET_RESTACK_WINDOW)) { if (e->xclient.data.l[0] != 2) { ob_debug_type(OB_DEBUG_APP_BUGS, "_NET_RESTACK_WINDOW sent for window %s with " - "invalid source indication %ld\n", + "invalid source indication %ld", client->title, e->xclient.data.l[0]); } else { ObClient *sibling = NULL; if (e->xclient.data.l[1]) { - ObWindow *win = g_hash_table_lookup - (window_map, &e->xclient.data.l[1]); + ObWindow *win = window_find(e->xclient.data.l[1]); if (WINDOW_IS_CLIENT(win) && WINDOW_AS_CLIENT(win) != client) { @@@ -1450,7 -1440,7 +1449,7 @@@ if (sibling == NULL) ob_debug_type(OB_DEBUG_APP_BUGS, "_NET_RESTACK_WINDOW sent for window %s " - "with invalid sibling 0x%x\n", + "with invalid sibling 0x%x", client->title, e->xclient.data.l[1]); } if (e->xclient.data.l[2] == Below || @@@ -1475,7 -1465,7 +1474,7 @@@ } else ob_debug_type(OB_DEBUG_APP_BUGS, "_NET_RESTACK_WINDOW sent for window %s " - "with invalid detail %d\n", + "with invalid detail %d", client->title, e->xclient.data.l[2]); } } @@@ -1485,7 -1475,7 +1484,7 @@@ if (!client_validate(client)) break; /* compress changes to a single property into a single change */ - while (XCheckTypedWindowEvent(ob_display, client->window, + while (XCheckTypedWindowEvent(obt_display, client->window, e->type, &ce)) { Atom a, b; @@@ -1497,28 -1487,28 +1496,28 @@@ if (a == b) continue; - if ((a == prop_atoms.net_wm_name || - a == prop_atoms.wm_name || - a == prop_atoms.net_wm_icon_name || - a == prop_atoms.wm_icon_name) + if ((a == OBT_PROP_ATOM(NET_WM_NAME) || + a == OBT_PROP_ATOM(WM_NAME) || + a == OBT_PROP_ATOM(NET_WM_ICON_NAME) || + a == OBT_PROP_ATOM(WM_ICON_NAME)) && - (b == prop_atoms.net_wm_name || - b == prop_atoms.wm_name || - b == prop_atoms.net_wm_icon_name || - b == prop_atoms.wm_icon_name)) { + (b == OBT_PROP_ATOM(NET_WM_NAME) || + b == OBT_PROP_ATOM(WM_NAME) || + b == OBT_PROP_ATOM(NET_WM_ICON_NAME) || + b == OBT_PROP_ATOM(WM_ICON_NAME))) { continue; } - if (a == prop_atoms.net_wm_icon && - b == prop_atoms.net_wm_icon) + if (a == OBT_PROP_ATOM(NET_WM_ICON) && + b == OBT_PROP_ATOM(NET_WM_ICON)) continue; - XPutBackEvent(ob_display, &ce); + XPutBackEvent(obt_display, &ce); break; } msgtype = e->xproperty.atom; if (msgtype == XA_WM_NORMAL_HINTS) { - ob_debug("Update NORMAL hints\n"); + ob_debug("Update NORMAL hints"); client_update_normal_hints(client); /* normal hints can make a window non-resizable */ client_setup_decor_and_functions(client, FALSE); @@@ -1535,30 -1525,30 +1534,30 @@@ /* type may have changed, so update the layer */ client_calc_layer(client); client_setup_decor_and_functions(client, TRUE); - } else if (msgtype == prop_atoms.net_wm_name || - msgtype == prop_atoms.wm_name || - msgtype == prop_atoms.net_wm_icon_name || - msgtype == prop_atoms.wm_icon_name) { + } else if (msgtype == OBT_PROP_ATOM(NET_WM_NAME) || + msgtype == OBT_PROP_ATOM(WM_NAME) || + msgtype == OBT_PROP_ATOM(NET_WM_ICON_NAME) || + msgtype == OBT_PROP_ATOM(WM_ICON_NAME)) { client_update_title(client); - } else if (msgtype == prop_atoms.wm_protocols) { + } else if (msgtype == OBT_PROP_ATOM(WM_PROTOCOLS)) { client_update_protocols(client); client_setup_decor_and_functions(client, TRUE); } - else if (msgtype == prop_atoms.net_wm_strut || - msgtype == prop_atoms.net_wm_strut_partial) { + else if (msgtype == OBT_PROP_ATOM(NET_WM_STRUT) || + msgtype == OBT_PROP_ATOM(NET_WM_STRUT_PARTIAL)) { client_update_strut(client); } - else if (msgtype == prop_atoms.net_wm_icon) { + else if (msgtype == OBT_PROP_ATOM(NET_WM_ICON)) { client_update_icons(client); } - else if (msgtype == prop_atoms.net_wm_icon_geometry) { + else if (msgtype == OBT_PROP_ATOM(NET_WM_ICON_GEOMETRY)) { client_update_icon_geometry(client); } - else if (msgtype == prop_atoms.net_wm_user_time) { + else if (msgtype == OBT_PROP_ATOM(NET_WM_USER_TIME)) { guint32 t; if (client == focus_client && - PROP_GET32(client->window, net_wm_user_time, cardinal, &t) && - t && !event_time_after(t, e->xproperty.time) && + OBT_PROP_GET32(client->window, NET_WM_USER_TIME, CARDINAL, &t) + && t && !event_time_after(t, e->xproperty.time) && (!event_last_user_time || event_time_after(t, event_last_user_time))) { @@@ -1566,7 -1556,7 +1565,7 @@@ } } #ifdef SYNC - else if (msgtype == prop_atoms.net_wm_sync_request_counter) { + else if (msgtype == OBT_PROP_ATOM(NET_WM_SYNC_REQUEST_COUNTER)) { client_update_sync_request_counter(client); } #endif @@@ -1577,9 -1567,7 +1576,9 @@@ default: ; #ifdef SHAPE - if (extensions_shape && e->type == extensions_shape_event_basep) { + if (obt_display_extension_shape && + e->type == obt_display_extension_shape_basep) + { client->shaped = ((XShapeEvent*)e)->shaped; frame_adjust_shape(client->frame); } @@@ -1618,11 -1606,11 +1617,11 @@@ static void event_handle_dockapp(ObDock app->ignore_unmaps--; break; } - dock_remove(app, TRUE); + dock_unmanage(app, TRUE); break; case DestroyNotify: case ReparentNotify: - dock_remove(app, FALSE); + dock_unmanage(app, FALSE); break; case ConfigureNotify: dock_app_configure(app, e->xconfigure.width, e->xconfigure.height); @@@ -1669,160 -1657,125 +1668,160 @@@ static gboolean event_handle_prompt(ObP return FALSE; } -static gboolean event_handle_menu_keyboard(XEvent *ev) +static gboolean event_handle_menu_input(XEvent *ev) { - guint keycode, state; - gunichar unikey; - ObMenuFrame *frame; gboolean ret = FALSE; - keycode = ev->xkey.keycode; - state = ev->xkey.state; - unikey = translate_unichar(keycode); + if (ev->type == ButtonRelease || ev->type == ButtonPress) { + ObMenuEntryFrame *e; - frame = find_active_or_last_menu(); - if (frame == NULL) - g_assert_not_reached(); /* there is no active menu */ + if (menu_hide_delay_reached() && + (ev->xbutton.button < 4 || ev->xbutton.button > 5)) + { + if ((e = menu_entry_frame_under(ev->xbutton.x_root, + ev->xbutton.y_root))) + { + if (ev->type == ButtonPress && e->frame->child) + menu_frame_select(e->frame->child, NULL, TRUE); + menu_frame_select(e->frame, e, TRUE); + if (ev->type == ButtonRelease) + menu_entry_frame_execute(e, ev->xbutton.state); + } + else if (ev->type == ButtonRelease) + menu_frame_hide_all(); + } + ret = TRUE; + } + else if (ev->type == MotionNotify) { + ObMenuFrame *f; + ObMenuEntryFrame *e; - /* Allow control while going thru the menu */ - else if (ev->type == KeyPress && (state & ~ControlMask) == 0) { - frame->got_press = TRUE; + if ((e = menu_entry_frame_under(ev->xmotion.x_root, + ev->xmotion.y_root))) + if (!(f = find_active_menu()) || + f == e->frame || + f->parent == e->frame || + f->child == e->frame) + menu_frame_select(e->frame, e, FALSE); + } + else if (ev->type == KeyPress || ev->type == KeyRelease) { + guint keycode, state; + gunichar unikey; + ObMenuFrame *frame; - if (keycode == ob_keycode(OB_KEY_ESCAPE)) { - menu_frame_hide_all(); - ret = TRUE; - } + keycode = ev->xkey.keycode; + state = ev->xkey.state; + unikey = obt_keyboard_keycode_to_unichar(keycode); - else if (keycode == ob_keycode(OB_KEY_LEFT)) { - /* Left goes to the parent menu */ - if (frame->parent) - menu_frame_select(frame, NULL, TRUE); - ret = TRUE; - } + frame = find_active_or_last_menu(); + if (frame == NULL) + g_assert_not_reached(); /* there is no active menu */ - else if (keycode == ob_keycode(OB_KEY_RIGHT)) { - /* Right goes to the selected submenu */ - if (frame->child) menu_frame_select_next(frame->child); - ret = TRUE; - } + /* Allow control while going thru the menu */ + else if (ev->type == KeyPress && (state & ~ControlMask) == 0) { + frame->got_press = TRUE; - else if (keycode == ob_keycode(OB_KEY_UP)) { - menu_frame_select_previous(frame); - ret = TRUE; - } + if (keycode == ob_keycode(OB_KEY_ESCAPE)) { + menu_frame_hide_all(); + ret = TRUE; + } - else if (keycode == ob_keycode(OB_KEY_DOWN)) { - menu_frame_select_next(frame); - ret = TRUE; - } - } + else if (keycode == ob_keycode(OB_KEY_LEFT)) { + /* Left goes to the parent menu */ + if (frame->parent) + menu_frame_select(frame, NULL, TRUE); + ret = TRUE; + } - /* Use KeyRelease events for running things so that the key release doesn't - get sent to the focused application. + else if (keycode == ob_keycode(OB_KEY_RIGHT)) { + /* Right goes to the selected submenu */ + if (frame->child) menu_frame_select_next(frame->child); + ret = TRUE; + } - Allow ControlMask only, and don't bother if the menu is empty */ - else if (ev->type == KeyRelease && (state & ~ControlMask) == 0 && - frame->entries && frame->got_press) - { - if (keycode == ob_keycode(OB_KEY_RETURN)) { - /* Enter runs the active item or goes into the submenu. - Control-Enter runs it without closing the menu. */ - if (frame->child) - menu_frame_select_next(frame->child); - else if (frame->selected) - menu_entry_frame_execute(frame->selected, state); - - ret = TRUE; - } + else if (keycode == ob_keycode(OB_KEY_UP)) { + menu_frame_select_previous(frame); + ret = TRUE; + } - /* keyboard accelerator shortcuts. (if it was a valid key) */ - else if (unikey != 0) { - GList *start; - GList *it; - ObMenuEntryFrame *found = NULL; - guint num_found = 0; - - /* start after the selected one */ - start = frame->entries; - if (frame->selected) { - for (it = start; frame->selected != it->data; - it = g_list_next(it)) - g_assert(it != NULL); /* nothing was selected? */ - /* next with wraparound */ - start = g_list_next(it); - if (start == NULL) start = frame->entries; + else if (keycode == ob_keycode(OB_KEY_DOWN)) { + menu_frame_select_next(frame); + ret = TRUE; } + } + + /* Use KeyRelease events for running things so that the key release + doesn't get sent to the focused application. - it = start; - do { - ObMenuEntryFrame *e = it->data; - gunichar entrykey = 0; + Allow ControlMask only, and don't bother if the menu is empty */ + else if (ev->type == KeyRelease && (state & ~ControlMask) == 0 && + frame->entries && frame->got_press) + { + if (keycode == ob_keycode(OB_KEY_RETURN)) { + /* Enter runs the active item or goes into the submenu. + Control-Enter runs it without closing the menu. */ + if (frame->child) + menu_frame_select_next(frame->child); + else if (frame->selected) + menu_entry_frame_execute(frame->selected, state); - if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) - entrykey = e->entry->data.normal.shortcut; - else if (e->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) - entrykey = e->entry->data.submenu.submenu->shortcut; + ret = TRUE; + } - if (unikey == entrykey) { - if (found == NULL) found = e; - ++num_found; + /* keyboard accelerator shortcuts. (if it was a valid key) */ + else if (unikey != 0) { + GList *start; + GList *it; + ObMenuEntryFrame *found = NULL; + guint num_found = 0; + + /* start after the selected one */ + start = frame->entries; + if (frame->selected) { + for (it = start; frame->selected != it->data; + it = g_list_next(it)) + g_assert(it != NULL); /* nothing was selected? */ + /* next with wraparound */ + start = g_list_next(it); + if (start == NULL) start = frame->entries; } - /* next with wraparound */ - it = g_list_next(it); - if (it == NULL) it = frame->entries; - } while (it != start); + it = start; + do { + ObMenuEntryFrame *e = it->data; + gunichar entrykey = 0; - if (found) { - if (found->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && - num_found == 1) - { - menu_frame_select(frame, found, TRUE); - usleep(50000); /* highlight the item for a short bit so the - user can see what happened */ - menu_entry_frame_execute(found, state); - } else { - menu_frame_select(frame, found, TRUE); - if (num_found == 1) - menu_frame_select_next(frame->child); - } + if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) + entrykey = e->entry->data.normal.shortcut; + else if (e->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) + entrykey = e->entry->data.submenu.submenu->shortcut; - ret = TRUE; + if (unikey == entrykey) { + if (found == NULL) found = e; + ++num_found; + } + + /* next with wraparound */ + it = g_list_next(it); + if (it == NULL) it = frame->entries; + } while (it != start); + + if (found) { + if (found->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && + num_found == 1) + { + menu_frame_select(frame, found, TRUE); + usleep(50000); /* highlight the item for a short bit so + the user can see what happened */ + menu_entry_frame_execute(found, state); + } else { + menu_frame_select(frame, found, TRUE); + if (num_found == 1) + menu_frame_select_next(frame->child); + } + + ret = TRUE; + } } } } @@@ -1830,12 -1783,27 +1829,12 @@@ return ret; } -static gboolean event_handle_menu(XEvent *ev) +static void event_handle_menu(ObMenuFrame *frame, XEvent *ev) { ObMenuFrame *f; ObMenuEntryFrame *e; - gboolean ret = TRUE; switch (ev->type) { - case ButtonRelease: - if (menu_hide_delay_reached() && - (ev->xbutton.button < 4 || ev->xbutton.button > 5)) - { - if ((e = menu_entry_frame_under(ev->xbutton.x_root, - ev->xbutton.y_root))) - { - menu_frame_select(e->frame, e, TRUE); - menu_entry_frame_execute(e, ev->xbutton.state); - } - else - menu_frame_hide_all(); - } - break; case EnterNotify: if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window))) { if (e->ignore_enters) @@@ -1859,7 -1827,21 +1858,7 @@@ menu_frame_select(e->frame, NULL, FALSE); } break; - case MotionNotify: - if ((e = menu_entry_frame_under(ev->xmotion.x_root, - ev->xmotion.y_root))) - if (!(f = find_active_menu()) || - f == e->frame || - f->parent == e->frame || - f->child == e->frame) - menu_frame_select(e->frame, e, FALSE); - break; - case KeyPress: - case KeyRelease: - ret = event_handle_menu_keyboard(ev); - break; } - return ret; } static void event_handle_user_input(ObClient *client, XEvent *e) @@@ -1869,7 -1851,7 +1868,7 @@@ e->type == KeyRelease); if (menu_frame_visible) { - if (event_handle_menu(e)) + if (event_handle_menu_input(e)) /* don't use the event if the menu used it, but if the menu didn't use it and it's a keypress that is bound, it will close the menu and be used */ @@@ -1893,16 -1875,11 +1892,16 @@@ if (!client || !frame_iconify_animating(client->frame)) mouse_event(client, e); } else - keyboard_event((focus_cycle_target ? focus_cycle_target : - (client ? client : focus_client)), e); + keyboard_event(event_target_client(client), e); } } +ObClient* event_target_client(ObClient *client) +{ + return (focus_cycle_target ? focus_cycle_target : + (client ? client : focus_client)); +} + static void focus_delay_dest(gpointer data) { g_free(data); @@@ -1932,20 -1909,20 +1931,20 @@@ static gboolean focus_delay_func(gpoint static void focus_delay_client_dest(ObClient *client, gpointer data) { - ob_main_loop_timeout_remove_data(ob_main_loop, focus_delay_func, - client, FALSE); + obt_main_loop_timeout_remove_data(ob_main_loop, focus_delay_func, + client, FALSE); } void event_halt_focus_delay(void) { /* ignore all enter events up till the event which caused this to occur */ if (event_curserial) event_ignore_enter_range(1, event_curserial); - ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func); + obt_main_loop_timeout_remove(ob_main_loop, focus_delay_func); } gulong event_start_ignore_all_enters(void) { - return NextRequest(ob_display); + return NextRequest(obt_display); } static void event_ignore_enter_range(gulong start, gulong end) @@@ -1960,11 -1937,11 +1959,11 @@@ r->end = end; ignore_serials = g_slist_prepend(ignore_serials, r); - ob_debug_type(OB_DEBUG_FOCUS, "ignoring enters from %lu until %lu\n", + ob_debug_type(OB_DEBUG_FOCUS, "ignoring enters from %lu until %lu", r->start, r->end); /* increment the serial so we don't ignore events we weren't meant to */ - PROP_ERASE(screen_support_win, motif_wm_hints); + OBT_PROP_ERASE(screen_support_win, MOTIF_WM_HINTS); } void event_end_ignore_all_enters(gulong start) @@@ -1975,7 -1952,7 +1974,7 @@@ movement will be ignored until we create some further network traffic. Instead ignore up to NextRequest-1, then when we increment the serial, we will be *past* the range of ignored serials */ - event_ignore_enter_range(start, NextRequest(ob_display)-1); + event_ignore_enter_range(start, NextRequest(obt_display)-1); } static gboolean is_enter_focus_event_ignored(gulong serial) @@@ -2002,24 -1979,24 +2001,24 @@@ void event_cancel_all_key_grabs(void { if (actions_interactive_act_running()) { actions_interactive_cancel_act(); - ob_debug("KILLED interactive action\n"); + ob_debug("KILLED interactive action"); } else if (menu_frame_visible) { menu_frame_hide_all(); - ob_debug("KILLED open menus\n"); + ob_debug("KILLED open menus"); } else if (moveresize_in_progress) { moveresize_end(TRUE); - ob_debug("KILLED interactive moveresize\n"); + ob_debug("KILLED interactive moveresize"); } else if (grab_on_keyboard()) { ungrab_keyboard(); - ob_debug("KILLED active grab on keyboard\n"); + ob_debug("KILLED active grab on keyboard"); } else ungrab_passive_key(); - XSync(ob_display, FALSE); + XSync(obt_display, FALSE); } gboolean event_time_after(Time t1, Time t2) @@@ -2052,9 -2029,9 +2051,9 @@@ Time event_get_server_time(void /* Generate a timestamp */ XEvent event; - XChangeProperty(ob_display, screen_support_win, - prop_atoms.wm_class, prop_atoms.string, + XChangeProperty(obt_display, screen_support_win, + OBT_PROP_ATOM(WM_CLASS), OBT_PROP_ATOM(STRING), 8, PropModeAppend, NULL, 0); - XWindowEvent(ob_display, screen_support_win, PropertyChangeMask, &event); + XWindowEvent(obt_display, screen_support_win, PropertyChangeMask, &event); return event.xproperty.time; } diff --combined openbox/focus.c index 23cf9101,63eb2cca..baf88e81 --- a/openbox/focus.c +++ b/openbox/focus.c @@@ -26,11 -26,10 +26,11 @@@ #include "group.h" #include "focus_cycle.h" #include "screen.h" -#include "prop.h" #include "keyboard.h" +#include "hooks.h" #include "focus.h" #include "stacking.h" +#include "obt/prop.h" #include #include @@@ -53,7 -52,7 +53,7 @@@ void focus_shutdown(gboolean reconfig if (reconfig) return; /* reset focus to root */ - XSetInputFocus(ob_display, PointerRoot, RevertToNone, CurrentTime); + XSetInputFocus(obt_display, PointerRoot, RevertToNone, CurrentTime); } static void push_to_top(ObClient *client) @@@ -73,10 -72,9 +73,10 @@@ void focus_set_client(ObClient *client) { Window active; + ObClient *old; ob_debug_type(OB_DEBUG_FOCUS, - "focus_set_client 0x%lx\n", client ? client->window : 0); + "focus_set_client 0x%lx", client ? client->window : 0); if (focus_client == client) return; @@@ -89,7 -87,6 +89,7 @@@ focus_cycle_stop(focus_client); focus_cycle_stop(client); + old = focus_client; focus_client = client; if (client != NULL) { @@@ -102,11 -99,9 +102,11 @@@ /* set the NET_ACTIVE_WINDOW hint, but preserve it on shutdown */ if (ob_state() != OB_STATE_EXITING) { active = client ? client->window : None; - PROP_SET32(RootWindow(ob_display, ob_screen), - net_active_window, window, active); + OBT_PROP_SET32(obt_root(ob_screen), NET_ACTIVE_WINDOW, WINDOW, active); } + + hooks_queue(OB_HOOK_WIN_UNFOCUS, old); + hooks_queue(OB_HOOK_WIN_FOCUS, client); } static ObClient* focus_fallback_target(gboolean allow_refocus, @@@ -117,18 -112,18 +117,18 @@@ GList *it; ObClient *c; - ob_debug_type(OB_DEBUG_FOCUS, "trying pointer stuff\n"); + ob_debug_type(OB_DEBUG_FOCUS, "trying pointer stuff"); if (allow_pointer && config_focus_follow) if ((c = client_under_pointer()) && (allow_refocus || client_focus_target(c) != old) && (client_normal(c) && client_focus(c))) { - ob_debug_type(OB_DEBUG_FOCUS, "found in pointer stuff\n"); + ob_debug_type(OB_DEBUG_FOCUS, "found in pointer stuff"); return c; } - ob_debug_type(OB_DEBUG_FOCUS, "trying the focus order\n"); + ob_debug_type(OB_DEBUG_FOCUS, "trying the focus order"); for (it = focus_order; it; it = g_list_next(it)) { c = it->data; /* fallback focus to a window if: @@@ -144,12 -139,12 +144,12 @@@ (allow_refocus || client_focus_target(c) != old) && client_focus(c)) { - ob_debug_type(OB_DEBUG_FOCUS, "found in focus order\n"); + ob_debug_type(OB_DEBUG_FOCUS, "found in focus order"); return c; } } - ob_debug_type(OB_DEBUG_FOCUS, "trying a desktop window\n"); + ob_debug_type(OB_DEBUG_FOCUS, "trying a desktop window"); for (it = focus_order; it; it = g_list_next(it)) { c = it->data; /* fallback focus to a window if: @@@ -163,7 -158,7 +163,7 @@@ (allow_refocus || client_focus_target(c) != old) && client_focus(c)) { - ob_debug_type(OB_DEBUG_FOCUS, "found a desktop window\n"); + ob_debug_type(OB_DEBUG_FOCUS, "found a desktop window"); return c; } } @@@ -205,7 -200,7 +205,7 @@@ void focus_nothing(void event_cancel_all_key_grabs(); /* when nothing will be focused, send focus to the backup target */ - XSetInputFocus(ob_display, screen_support_win, RevertToPointerRoot, + XSetInputFocus(obt_display, screen_support_win, RevertToPointerRoot, event_curtime); } @@@ -364,4 -359,3 +364,3 @@@ gboolean focus_valid_target(ObClient *f return ok; } - diff --combined openbox/focus_cycle.c index 4d793777,e30672dc..063de644 --- a/openbox/focus_cycle.c +++ b/openbox/focus_cycle.c @@@ -19,6 -19,7 +19,6 @@@ #include "focus_cycle.h" #include "focus_cycle_indicator.h" -#include "focus_cycle_popup.h" #include "client.h" #include "frame.h" #include "focus.h" @@@ -69,7 -70,7 +69,7 @@@ void focus_cycle_stop(ObClient *ifclien ObClient* focus_cycle(gboolean forward, gboolean all_desktops, gboolean dock_windows, gboolean desktop_windows, gboolean linear, gboolean interactive, - gboolean showbar, gboolean dialog, + gboolean showbar, ObFocusCyclePopupMode mode, gboolean done, gboolean cancel) { static GList *order = NULL; @@@ -95,7 -96,6 +95,6 @@@ list = client_list; } - if (focus_cycle_target == NULL) { focus_cycle_iconic_windows = TRUE; focus_cycle_all_desktops = all_desktops; @@@ -129,13 -129,13 +128,13 @@@ focus_cycle_target = ft; focus_cycle_draw_indicator(showbar ? ft : NULL); } - if (dialog) - /* same arguments as focus_target_valid */ - focus_cycle_popup_show(ft, - focus_cycle_iconic_windows, - focus_cycle_all_desktops, - focus_cycle_dock_windows, - focus_cycle_desktop_windows); + /* same arguments as focus_target_valid */ + focus_cycle_popup_show(ft, + focus_cycle_iconic_windows, + focus_cycle_all_desktops, + focus_cycle_dock_windows, + focus_cycle_desktop_windows, + mode); return focus_cycle_target; } else if (ft != focus_cycle_target) { focus_cycle_target = ft; diff --combined openbox/frame.c index 25c47048,235dd30b..8a7b1aef --- a/openbox/frame.c +++ b/openbox/frame.c @@@ -20,16 -20,17 +20,16 @@@ #include "frame.h" #include "client.h" #include "openbox.h" -#include "extensions.h" -#include "prop.h" #include "grab.h" #include "config.h" #include "framerender.h" -#include "mainloop.h" #include "focus_cycle.h" #include "focus_cycle_indicator.h" #include "moveresize.h" #include "screen.h" #include "render/theme.h" +#include "obt/display.h" +#include "obt/prop.h" #define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \ ButtonPressMask | ButtonReleaseMask | \ @@@ -55,7 -56,7 +55,7 @@@ static void frame_adjust_cursors(ObFram static Window createWindow(Window parent, Visual *visual, gulong mask, XSetWindowAttributes *attrib) { - return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0, + return XCreateWindow(obt_display, parent, 0, 0, 1, 1, 0, (visual ? 32 : RrDepth(ob_rr_inst)), InputOutput, (visual ? visual : RrVisual(ob_rr_inst)), mask, attrib); @@@ -72,7 -73,7 +72,7 @@@ static Visual *check_32bit_client(ObCli if (RrDepth(ob_rr_inst) == 32) return NULL; - ret = XGetWindowAttributes(ob_display, c->window, &wattrib); + ret = XGetWindowAttributes(obt_display, c->window, &wattrib); g_assert(ret != BadDrawable); g_assert(ret != BadWindow); @@@ -101,12 -102,13 +101,12 @@@ ObFrame *frame_new(ObClient *client mask = CWColormap | CWBackPixel | CWBorderPixel; /* create a colormap with the visual */ self->colormap = attrib.colormap = - XCreateColormap(ob_display, - RootWindow(ob_display, ob_screen), + XCreateColormap(obt_display, obt_root(ob_screen), visual, AllocNone); - attrib.background_pixel = BlackPixel(ob_display, ob_screen); - attrib.border_pixel = BlackPixel(ob_display, ob_screen); + attrib.background_pixel = BlackPixel(obt_display, ob_screen); + attrib.border_pixel = BlackPixel(obt_display, ob_screen); } - self->window = createWindow(RootWindow(ob_display, ob_screen), visual, + self->window = createWindow(obt_root(ob_screen), visual, mask, &attrib); /* create the visible decor windows */ @@@ -177,9 -179,9 +177,9 @@@ self->focused = FALSE; /* the other stuff is shown based on decor settings */ - XMapWindow(ob_display, self->label); - XMapWindow(ob_display, self->backback); - XMapWindow(ob_display, self->backfront); + XMapWindow(obt_display, self->label); + XMapWindow(obt_display, self->backback); + XMapWindow(obt_display, self->backfront); self->max_press = self->close_press = self->desk_press = self->iconify_press = self->shade_press = FALSE; @@@ -194,25 -196,25 +194,25 @@@ static void set_theme_statics(ObFrame *self) { /* set colors/appearance/sizes for stuff that doesn't change */ - XResizeWindow(ob_display, self->max, + XResizeWindow(obt_display, self->max, ob_rr_theme->button_size, ob_rr_theme->button_size); - XResizeWindow(ob_display, self->iconify, + XResizeWindow(obt_display, self->iconify, ob_rr_theme->button_size, ob_rr_theme->button_size); - XResizeWindow(ob_display, self->icon, + XResizeWindow(obt_display, self->icon, ob_rr_theme->button_size + 2, ob_rr_theme->button_size + 2); - XResizeWindow(ob_display, self->close, + XResizeWindow(obt_display, self->close, ob_rr_theme->button_size, ob_rr_theme->button_size); - XResizeWindow(ob_display, self->desk, + XResizeWindow(obt_display, self->desk, ob_rr_theme->button_size, ob_rr_theme->button_size); - XResizeWindow(ob_display, self->shade, + XResizeWindow(obt_display, self->shade, ob_rr_theme->button_size, ob_rr_theme->button_size); - XResizeWindow(ob_display, self->tltresize, + XResizeWindow(obt_display, self->tltresize, ob_rr_theme->grip_width, ob_rr_theme->paddingy + 1); - XResizeWindow(ob_display, self->trtresize, + XResizeWindow(obt_display, self->trtresize, ob_rr_theme->grip_width, ob_rr_theme->paddingy + 1); - XResizeWindow(ob_display, self->tllresize, + XResizeWindow(obt_display, self->tllresize, ob_rr_theme->paddingx + 1, ob_rr_theme->title_height); - XResizeWindow(ob_display, self->trrresize, + XResizeWindow(obt_display, self->trrresize, ob_rr_theme->paddingx + 1, ob_rr_theme->title_height); } @@@ -224,9 -226,9 +224,9 @@@ void frame_free(ObFrame *self { free_theme_statics(self); - XDestroyWindow(ob_display, self->window); + XDestroyWindow(obt_display, self->window); if (self->colormap) - XFreeColormap(ob_display, self->colormap); + XFreeColormap(obt_display, self->colormap); g_free(self); } @@@ -240,8 -242,8 +240,8 @@@ void frame_show(ObFrame *self the client gets its MapNotify, i.e. to make sure the client is _visible_ when it gets MapNotify. */ grab_server(TRUE); - XMapWindow(ob_display, self->client->window); - XMapWindow(ob_display, self->window); + XMapWindow(obt_display, self->client->window); + XMapWindow(obt_display, self->window); grab_server(FALSE); } } @@@ -251,10 -253,10 +251,10 @@@ void frame_hide(ObFrame *self if (self->visible) { self->visible = FALSE; if (!frame_iconify_animating(self)) - XUnmapWindow(ob_display, self->window); + XUnmapWindow(obt_display, self->window); /* we unmap the client itself so that we can get MapRequest events, and because the ICCCM tells us to! */ - XUnmapWindow(ob_display, self->client->window); + XUnmapWindow(obt_display, self->client->window); self->client->ignore_unmaps += 1; } } @@@ -273,13 -275,13 +273,13 @@@ void frame_adjust_shape(ObFrame *self if (!self->client->shaped) { /* clear the shape on the frame window */ - XShapeCombineMask(ob_display, self->window, ShapeBounding, + XShapeCombineMask(obt_display, self->window, ShapeBounding, self->size.left, self->size.top, None, ShapeSet); } else { /* make the frame's shape match the clients */ - XShapeCombineShape(ob_display, self->window, ShapeBounding, + XShapeCombineShape(obt_display, self->window, ShapeBounding, self->size.left, self->size.top, self->client->window, @@@ -305,7 -307,7 +305,7 @@@ ++num; } - XShapeCombineRectangles(ob_display, self->window, + XShapeCombineRectangles(obt_display, self->window, ShapeBounding, 0, 0, xrect, num, ShapeUnion, Unsorted); } @@@ -380,17 -382,17 +380,17 @@@ void frame_adjust_area(ObFrame *self, g ob_rr_theme->grip_width - self->size.bottom; if (self->cbwidth_l) { - XMoveResizeWindow(ob_display, self->innerleft, + XMoveResizeWindow(obt_display, self->innerleft, self->size.left - self->cbwidth_l, self->size.top, self->cbwidth_l, self->client->area.height); - XMapWindow(ob_display, self->innerleft); + XMapWindow(obt_display, self->innerleft); } else - XUnmapWindow(ob_display, self->innerleft); + XUnmapWindow(obt_display, self->innerleft); if (self->cbwidth_l && innercornerheight > 0) { - XMoveResizeWindow(ob_display, self->innerbll, + XMoveResizeWindow(obt_display, self->innerbll, 0, self->client->area.height - (ob_rr_theme->grip_width - @@@ -398,22 -400,22 +398,22 @@@ self->cbwidth_l, ob_rr_theme->grip_width - self->size.bottom); - XMapWindow(ob_display, self->innerbll); + XMapWindow(obt_display, self->innerbll); } else - XUnmapWindow(ob_display, self->innerbll); + XUnmapWindow(obt_display, self->innerbll); if (self->cbwidth_r) { - XMoveResizeWindow(ob_display, self->innerright, + XMoveResizeWindow(obt_display, self->innerright, self->size.left + self->client->area.width, self->size.top, self->cbwidth_r, self->client->area.height); - XMapWindow(ob_display, self->innerright); + XMapWindow(obt_display, self->innerright); } else - XUnmapWindow(ob_display, self->innerright); + XUnmapWindow(obt_display, self->innerright); if (self->cbwidth_r && innercornerheight > 0) { - XMoveResizeWindow(ob_display, self->innerbrr, + XMoveResizeWindow(obt_display, self->innerbrr, 0, self->client->area.height - (ob_rr_theme->grip_width - @@@ -421,35 -423,35 +421,35 @@@ self->cbwidth_r, ob_rr_theme->grip_width - self->size.bottom); - XMapWindow(ob_display, self->innerbrr); + XMapWindow(obt_display, self->innerbrr); } else - XUnmapWindow(ob_display, self->innerbrr); + XUnmapWindow(obt_display, self->innerbrr); if (self->cbwidth_t) { - XMoveResizeWindow(ob_display, self->innertop, + XMoveResizeWindow(obt_display, self->innertop, self->size.left - self->cbwidth_l, self->size.top - self->cbwidth_t, self->client->area.width + self->cbwidth_l + self->cbwidth_r, self->cbwidth_t); - XMapWindow(ob_display, self->innertop); + XMapWindow(obt_display, self->innertop); } else - XUnmapWindow(ob_display, self->innertop); + XUnmapWindow(obt_display, self->innertop); if (self->cbwidth_b) { - XMoveResizeWindow(ob_display, self->innerbottom, + XMoveResizeWindow(obt_display, self->innerbottom, self->size.left - self->cbwidth_l, self->size.top + self->client->area.height, self->client->area.width + self->cbwidth_l + self->cbwidth_r, self->cbwidth_b); - XMoveResizeWindow(ob_display, self->innerblb, + XMoveResizeWindow(obt_display, self->innerblb, 0, 0, ob_rr_theme->grip_width + self->bwidth, self->cbwidth_b); - XMoveResizeWindow(ob_display, self->innerbrb, + XMoveResizeWindow(obt_display, self->innerbrb, self->client->area.width + self->cbwidth_l + self->cbwidth_r - (ob_rr_theme->grip_width + self->bwidth), @@@ -457,13 -459,13 +457,13 @@@ ob_rr_theme->grip_width + self->bwidth, self->cbwidth_b); - XMapWindow(ob_display, self->innerbottom); - XMapWindow(ob_display, self->innerblb); - XMapWindow(ob_display, self->innerbrb); + XMapWindow(obt_display, self->innerbottom); + XMapWindow(obt_display, self->innerblb); + XMapWindow(obt_display, self->innerbrb); } else { - XUnmapWindow(ob_display, self->innerbottom); - XUnmapWindow(ob_display, self->innerblb); - XUnmapWindow(ob_display, self->innerbrb); + XUnmapWindow(obt_display, self->innerbottom); + XUnmapWindow(obt_display, self->innerblb); + XUnmapWindow(obt_display, self->innerbrb); } if (self->bwidth) { @@@ -472,16 -474,16 +472,16 @@@ /* height of titleleft and titleright */ titlesides = (!self->max_horz ? ob_rr_theme->grip_width : 0); - XMoveResizeWindow(ob_display, self->titletop, + XMoveResizeWindow(obt_display, self->titletop, ob_rr_theme->grip_width + self->bwidth, 0, /* width + bwidth*2 - bwidth*2 - grips*2 */ self->width - ob_rr_theme->grip_width * 2, self->bwidth); - XMoveResizeWindow(ob_display, self->titletopleft, + XMoveResizeWindow(obt_display, self->titletopleft, 0, 0, ob_rr_theme->grip_width + self->bwidth, self->bwidth); - XMoveResizeWindow(ob_display, self->titletopright, + XMoveResizeWindow(obt_display, self->titletopright, self->client->area.width + self->size.left + self->size.right - ob_rr_theme->grip_width - self->bwidth, @@@ -490,11 -492,11 +490,11 @@@ self->bwidth); if (titlesides > 0) { - XMoveResizeWindow(ob_display, self->titleleft, + XMoveResizeWindow(obt_display, self->titleleft, 0, self->bwidth, self->bwidth, titlesides); - XMoveResizeWindow(ob_display, self->titleright, + XMoveResizeWindow(obt_display, self->titleright, self->client->area.width + self->size.left + self->size.right - self->bwidth, @@@ -502,73 -504,73 +502,73 @@@ self->bwidth, titlesides); - XMapWindow(ob_display, self->titleleft); - XMapWindow(ob_display, self->titleright); + XMapWindow(obt_display, self->titleleft); + XMapWindow(obt_display, self->titleright); } else { - XUnmapWindow(ob_display, self->titleleft); - XUnmapWindow(ob_display, self->titleright); + XUnmapWindow(obt_display, self->titleleft); + XUnmapWindow(obt_display, self->titleright); } - XMapWindow(ob_display, self->titletop); - XMapWindow(ob_display, self->titletopleft); - XMapWindow(ob_display, self->titletopright); + XMapWindow(obt_display, self->titletop); + XMapWindow(obt_display, self->titletopleft); + XMapWindow(obt_display, self->titletopright); if (self->decorations & OB_FRAME_DECOR_TITLEBAR) { - XMoveResizeWindow(ob_display, self->titlebottom, + XMoveResizeWindow(obt_display, self->titlebottom, (self->max_horz ? 0 : self->bwidth), ob_rr_theme->title_height + self->bwidth, self->width, self->bwidth); - XMapWindow(ob_display, self->titlebottom); + XMapWindow(obt_display, self->titlebottom); } else - XUnmapWindow(ob_display, self->titlebottom); + XUnmapWindow(obt_display, self->titlebottom); } else { - XUnmapWindow(ob_display, self->titlebottom); + XUnmapWindow(obt_display, self->titlebottom); - XUnmapWindow(ob_display, self->titletop); - XUnmapWindow(ob_display, self->titletopleft); - XUnmapWindow(ob_display, self->titletopright); - XUnmapWindow(ob_display, self->titleleft); - XUnmapWindow(ob_display, self->titleright); + XUnmapWindow(obt_display, self->titletop); + XUnmapWindow(obt_display, self->titletopleft); + XUnmapWindow(obt_display, self->titletopright); + XUnmapWindow(obt_display, self->titleleft); + XUnmapWindow(obt_display, self->titleright); } if (self->decorations & OB_FRAME_DECOR_TITLEBAR) { - XMoveResizeWindow(ob_display, self->title, + XMoveResizeWindow(obt_display, self->title, (self->max_horz ? 0 : self->bwidth), self->bwidth, self->width, ob_rr_theme->title_height); - XMapWindow(ob_display, self->title); + XMapWindow(obt_display, self->title); if (self->decorations & OB_FRAME_DECOR_GRIPS) { - XMoveResizeWindow(ob_display, self->topresize, + XMoveResizeWindow(obt_display, self->topresize, ob_rr_theme->grip_width, 0, self->width - ob_rr_theme->grip_width *2, ob_rr_theme->paddingy + 1); - XMoveWindow(ob_display, self->tltresize, 0, 0); - XMoveWindow(ob_display, self->tllresize, 0, 0); - XMoveWindow(ob_display, self->trtresize, + XMoveWindow(obt_display, self->tltresize, 0, 0); + XMoveWindow(obt_display, self->tllresize, 0, 0); + XMoveWindow(obt_display, self->trtresize, self->width - ob_rr_theme->grip_width, 0); - XMoveWindow(ob_display, self->trrresize, + XMoveWindow(obt_display, self->trrresize, self->width - ob_rr_theme->paddingx - 1, 0); - XMapWindow(ob_display, self->topresize); - XMapWindow(ob_display, self->tltresize); - XMapWindow(ob_display, self->tllresize); - XMapWindow(ob_display, self->trtresize); - XMapWindow(ob_display, self->trrresize); + XMapWindow(obt_display, self->topresize); + XMapWindow(obt_display, self->tltresize); + XMapWindow(obt_display, self->tllresize); + XMapWindow(obt_display, self->trtresize); + XMapWindow(obt_display, self->trrresize); } else { - XUnmapWindow(ob_display, self->topresize); - XUnmapWindow(ob_display, self->tltresize); - XUnmapWindow(ob_display, self->tllresize); - XUnmapWindow(ob_display, self->trtresize); - XUnmapWindow(ob_display, self->trrresize); + XUnmapWindow(obt_display, self->topresize); + XUnmapWindow(obt_display, self->tltresize); + XUnmapWindow(obt_display, self->tllresize); + XUnmapWindow(obt_display, self->trtresize); + XUnmapWindow(obt_display, self->trrresize); } } else - XUnmapWindow(ob_display, self->title); + XUnmapWindow(obt_display, self->title); } if ((self->decorations & OB_FRAME_DECOR_TITLEBAR)) @@@ -579,7 -581,7 +579,7 @@@ gint sidebwidth = self->max_horz ? 0 : self->bwidth; if (self->bwidth && self->size.bottom) { - XMoveResizeWindow(ob_display, self->handlebottom, + XMoveResizeWindow(obt_display, self->handlebottom, ob_rr_theme->grip_width + self->bwidth + sidebwidth, self->size.top + self->client->area.height + @@@ -588,9 -590,8 +588,9 @@@ sidebwidth) * 2, self->bwidth); + if (sidebwidth) { - XMoveResizeWindow(ob_display, self->lgripleft, + XMoveResizeWindow(obt_display, self->lgripleft, 0, self->size.top + self->client->area.height + @@@ -602,7 -603,7 +602,7 @@@ (!self->max_horz ? ob_rr_theme->grip_width : self->size.bottom - self->cbwidth_b)); - XMoveResizeWindow(ob_display, self->rgripright, + XMoveResizeWindow(obt_display, self->rgripright, self->size.left + self->client->area.width + self->size.right - self->bwidth, @@@ -617,20 -618,20 +617,20 @@@ ob_rr_theme->grip_width : self->size.bottom - self->cbwidth_b)); - XMapWindow(ob_display, self->lgripleft); - XMapWindow(ob_display, self->rgripright); + XMapWindow(obt_display, self->lgripleft); + XMapWindow(obt_display, self->rgripright); } else { - XUnmapWindow(ob_display, self->lgripleft); - XUnmapWindow(ob_display, self->rgripright); + XUnmapWindow(obt_display, self->lgripleft); + XUnmapWindow(obt_display, self->rgripright); } - XMoveResizeWindow(ob_display, self->lgripbottom, + XMoveResizeWindow(obt_display, self->lgripbottom, sidebwidth, self->size.top + self->client->area.height + self->size.bottom - self->bwidth, ob_rr_theme->grip_width + self->bwidth, self->bwidth); - XMoveResizeWindow(ob_display, self->rgripbottom, + XMoveResizeWindow(obt_display, self->rgripbottom, self->size.left + self->client->area.width + self->size.right - self->bwidth - sidebwidth- ob_rr_theme->grip_width, @@@ -639,29 -640,29 +639,29 @@@ ob_rr_theme->grip_width + self->bwidth, self->bwidth); - XMapWindow(ob_display, self->handlebottom); - XMapWindow(ob_display, self->lgripbottom); - XMapWindow(ob_display, self->rgripbottom); + XMapWindow(obt_display, self->handlebottom); + XMapWindow(obt_display, self->lgripbottom); + XMapWindow(obt_display, self->rgripbottom); if (self->decorations & OB_FRAME_DECOR_HANDLE && ob_rr_theme->handle_height > 0) { - XMoveResizeWindow(ob_display, self->handletop, + XMoveResizeWindow(obt_display, self->handletop, ob_rr_theme->grip_width + self->bwidth + sidebwidth, FRAME_HANDLE_Y(self), self->width - (ob_rr_theme->grip_width + sidebwidth) * 2, self->bwidth); - XMapWindow(ob_display, self->handletop); + XMapWindow(obt_display, self->handletop); if (self->decorations & OB_FRAME_DECOR_GRIPS) { - XMoveResizeWindow(ob_display, self->handleleft, + XMoveResizeWindow(obt_display, self->handleleft, ob_rr_theme->grip_width, 0, self->bwidth, ob_rr_theme->handle_height); - XMoveResizeWindow(ob_display, self->handleright, + XMoveResizeWindow(obt_display, self->handleright, self->width - ob_rr_theme->grip_width - self->bwidth, @@@ -669,13 -670,13 +669,13 @@@ self->bwidth, ob_rr_theme->handle_height); - XMoveResizeWindow(ob_display, self->lgriptop, + XMoveResizeWindow(obt_display, self->lgriptop, sidebwidth, FRAME_HANDLE_Y(self), ob_rr_theme->grip_width + self->bwidth, self->bwidth); - XMoveResizeWindow(ob_display, self->rgriptop, + XMoveResizeWindow(obt_display, self->rgriptop, self->size.left + self->client->area.width + self->size.right - self->bwidth - @@@ -685,77 -686,77 +685,77 @@@ self->bwidth, self->bwidth); - XMapWindow(ob_display, self->handleleft); - XMapWindow(ob_display, self->handleright); - XMapWindow(ob_display, self->lgriptop); - XMapWindow(ob_display, self->rgriptop); + XMapWindow(obt_display, self->handleleft); + XMapWindow(obt_display, self->handleright); + XMapWindow(obt_display, self->lgriptop); + XMapWindow(obt_display, self->rgriptop); } else { - XUnmapWindow(ob_display, self->handleleft); - XUnmapWindow(ob_display, self->handleright); - XUnmapWindow(ob_display, self->lgriptop); - XUnmapWindow(ob_display, self->rgriptop); + XUnmapWindow(obt_display, self->handleleft); + XUnmapWindow(obt_display, self->handleright); + XUnmapWindow(obt_display, self->lgriptop); + XUnmapWindow(obt_display, self->rgriptop); } } else { - XUnmapWindow(ob_display, self->handleleft); - XUnmapWindow(ob_display, self->handleright); - XUnmapWindow(ob_display, self->lgriptop); - XUnmapWindow(ob_display, self->rgriptop); + XUnmapWindow(obt_display, self->handleleft); + XUnmapWindow(obt_display, self->handleright); + XUnmapWindow(obt_display, self->lgriptop); + XUnmapWindow(obt_display, self->rgriptop); - XUnmapWindow(ob_display, self->handletop); + XUnmapWindow(obt_display, self->handletop); } } else { - XUnmapWindow(ob_display, self->handleleft); - XUnmapWindow(ob_display, self->handleright); - XUnmapWindow(ob_display, self->lgriptop); - XUnmapWindow(ob_display, self->rgriptop); - - XUnmapWindow(ob_display, self->handletop); - - XUnmapWindow(ob_display, self->handlebottom); - XUnmapWindow(ob_display, self->lgripleft); - XUnmapWindow(ob_display, self->rgripright); - XUnmapWindow(ob_display, self->lgripbottom); - XUnmapWindow(ob_display, self->rgripbottom); + XUnmapWindow(obt_display, self->handleleft); + XUnmapWindow(obt_display, self->handleright); + XUnmapWindow(obt_display, self->lgriptop); + XUnmapWindow(obt_display, self->rgriptop); + + XUnmapWindow(obt_display, self->handletop); + + XUnmapWindow(obt_display, self->handlebottom); + XUnmapWindow(obt_display, self->lgripleft); + XUnmapWindow(obt_display, self->rgripright); + XUnmapWindow(obt_display, self->lgripbottom); + XUnmapWindow(obt_display, self->rgripbottom); } if (self->decorations & OB_FRAME_DECOR_HANDLE && ob_rr_theme->handle_height > 0) { - XMoveResizeWindow(ob_display, self->handle, + XMoveResizeWindow(obt_display, self->handle, sidebwidth, FRAME_HANDLE_Y(self) + self->bwidth, self->width, ob_rr_theme->handle_height); - XMapWindow(ob_display, self->handle); + XMapWindow(obt_display, self->handle); if (self->decorations & OB_FRAME_DECOR_GRIPS) { - XMoveResizeWindow(ob_display, self->lgrip, + XMoveResizeWindow(obt_display, self->lgrip, 0, 0, ob_rr_theme->grip_width, ob_rr_theme->handle_height); - XMoveResizeWindow(ob_display, self->rgrip, + XMoveResizeWindow(obt_display, self->rgrip, self->width - ob_rr_theme->grip_width, 0, ob_rr_theme->grip_width, ob_rr_theme->handle_height); - XMapWindow(ob_display, self->lgrip); - XMapWindow(ob_display, self->rgrip); + XMapWindow(obt_display, self->lgrip); + XMapWindow(obt_display, self->rgrip); } else { - XUnmapWindow(ob_display, self->lgrip); - XUnmapWindow(ob_display, self->rgrip); + XUnmapWindow(obt_display, self->lgrip); + XUnmapWindow(obt_display, self->rgrip); } } else { - XUnmapWindow(ob_display, self->lgrip); - XUnmapWindow(ob_display, self->rgrip); + XUnmapWindow(obt_display, self->lgrip); + XUnmapWindow(obt_display, self->rgrip); - XUnmapWindow(ob_display, self->handle); + XUnmapWindow(obt_display, self->handle); } if (self->bwidth && !self->max_horz && (self->client->area.height + self->size.top + self->size.bottom) > ob_rr_theme->grip_width * 2) { - XMoveResizeWindow(ob_display, self->left, + XMoveResizeWindow(obt_display, self->left, 0, self->bwidth + ob_rr_theme->grip_width, self->bwidth, @@@ -763,15 -764,15 +763,15 @@@ self->size.top + self->size.bottom - ob_rr_theme->grip_width * 2); - XMapWindow(ob_display, self->left); + XMapWindow(obt_display, self->left); } else - XUnmapWindow(ob_display, self->left); + XUnmapWindow(obt_display, self->left); if (self->bwidth && !self->max_horz && (self->client->area.height + self->size.top + self->size.bottom) > ob_rr_theme->grip_width * 2) { - XMoveResizeWindow(ob_display, self->right, + XMoveResizeWindow(obt_display, self->right, self->client->area.width + self->cbwidth_l + self->cbwidth_r + self->bwidth, self->bwidth + ob_rr_theme->grip_width, @@@ -780,11 -781,11 +780,11 @@@ self->size.top + self->size.bottom - ob_rr_theme->grip_width * 2); - XMapWindow(ob_display, self->right); + XMapWindow(obt_display, self->right); } else - XUnmapWindow(ob_display, self->right); + XUnmapWindow(obt_display, self->right); - XMoveResizeWindow(ob_display, self->backback, + XMoveResizeWindow(obt_display, self->backback, self->size.left, self->size.top, self->client->area.width, self->client->area.height); @@@ -816,7 -817,7 +816,7 @@@ but don't do this during an iconify animation. it will be reflected afterwards. */ - XMoveResizeWindow(ob_display, self->window, + XMoveResizeWindow(obt_display, self->window, self->area.x, self->area.y, self->area.width, @@@ -826,7 -827,7 +826,7 @@@ also this correctly positions the client when it maps. this also needs to be run when the frame's decorations sizes change! */ - XMoveWindow(ob_display, self->client->window, + XMoveWindow(obt_display, self->client->window, self->size.left, self->size.top); if (resized) { @@@ -841,10 -842,10 +841,10 @@@ vals[1] = self->size.right; vals[2] = self->size.top; vals[3] = self->size.bottom; - PROP_SETA32(self->client->window, net_frame_extents, - cardinal, vals, 4); - PROP_SETA32(self->client->window, kde_net_wm_frame_strut, - cardinal, vals, 4); + OBT_PROP_SETA32(self->client->window, NET_FRAME_EXTENTS, + CARDINAL, vals, 4); + OBT_PROP_SETA32(self->client->window, KDE_NET_WM_FRAME_STRUT, + CARDINAL, vals, 4); } /* if this occurs while we are focus cycling, the indicator needs to @@@ -853,7 -854,7 +853,7 @@@ focus_cycle_draw_indicator(self->client); } if (resized && (self->decorations & OB_FRAME_DECOR_TITLEBAR)) - XResizeWindow(ob_display, self->label, self->label_width, + XResizeWindow(obt_display, self->label, self->label_width, ob_rr_theme->label_height); } @@@ -875,58 -876,58 +875,58 @@@ static void frame_adjust_cursors(ObFram /* these ones turn off when max vert, and some when shaded */ a.cursor = ob_cursor(r && topbot && !sh ? OB_CURSOR_NORTH : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->topresize, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->titletop, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->topresize, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->titletop, CWCursor, &a); a.cursor = ob_cursor(r && topbot ? OB_CURSOR_SOUTH : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->handle, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->handletop, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->handlebottom, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->innerbottom, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->handle, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->handletop, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->handlebottom, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->innerbottom, CWCursor, &a); /* these ones change when shaded */ a.cursor = ob_cursor(r ? (sh ? OB_CURSOR_WEST : OB_CURSOR_NORTHWEST) : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->titleleft, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->tltresize, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->tllresize, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->titletopleft, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->titleleft, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->tltresize, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->tllresize, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->titletopleft, CWCursor, &a); a.cursor = ob_cursor(r ? (sh ? OB_CURSOR_EAST : OB_CURSOR_NORTHEAST) : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->titleright, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->trtresize, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->trrresize, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->titletopright, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->titleright, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->trtresize, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->trrresize, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->titletopright, CWCursor,&a); /* these ones are pretty static */ a.cursor = ob_cursor(r ? OB_CURSOR_WEST : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->left, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->innerleft, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->left, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->innerleft, CWCursor, &a); a.cursor = ob_cursor(r ? OB_CURSOR_EAST : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->right, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->innerright, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->right, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->innerright, CWCursor, &a); a.cursor = ob_cursor(r ? OB_CURSOR_SOUTHWEST : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->lgrip, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->handleleft, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->lgripleft, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->lgriptop, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->lgripbottom, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->innerbll, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->innerblb, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->lgrip, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->handleleft, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->lgripleft, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->lgriptop, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->lgripbottom, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->innerbll, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->innerblb, CWCursor, &a); a.cursor = ob_cursor(r ? OB_CURSOR_SOUTHEAST : OB_CURSOR_NONE); - XChangeWindowAttributes(ob_display, self->rgrip, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->handleright, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->rgripright, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->rgriptop, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->rgripbottom, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->innerbrr, CWCursor, &a); - XChangeWindowAttributes(ob_display, self->innerbrb, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->rgrip, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->handleright, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->rgripright, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->rgriptop, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->rgripbottom, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->innerbrr, CWCursor, &a); + XChangeWindowAttributes(obt_display, self->innerbrb, CWCursor, &a); } } void frame_adjust_client_area(ObFrame *self) { /* adjust the window which is there to prevent flashing on unmap */ - XMoveResizeWindow(ob_display, self->backfront, 0, 0, + XMoveResizeWindow(obt_display, self->backfront, 0, 0, self->client->area.width, self->client->area.height); } @@@ -942,7 -943,7 +942,7 @@@ void frame_adjust_focus(ObFrame *self, self->focused = hilite; self->need_render = TRUE; framerender_frame(self); - XFlush(ob_display); + XFlush(obt_display); } void frame_adjust_title(ObFrame *self) @@@ -965,7 -966,7 +965,7 @@@ void frame_grab_client(ObFrame *self */ /* reparent the client to the frame */ - XReparentWindow(ob_display, self->client->window, self->window, 0, 0); + XReparentWindow(obt_display, self->client->window, self->window, 0, 0); /* When reparenting the client window, it is usually not mapped yet, since @@@ -978,54 -979,54 +978,54 @@@ /* select the event mask on the client's parent (to receive config/map req's) the ButtonPress is to catch clicks on the client border */ - XSelectInput(ob_display, self->window, FRAME_EVENTMASK); + XSelectInput(obt_display, self->window, FRAME_EVENTMASK); /* set all the windows for the frame in the window_map */ - g_hash_table_insert(window_map, &self->window, self->client); - g_hash_table_insert(window_map, &self->backback, self->client); - g_hash_table_insert(window_map, &self->backfront, self->client); - g_hash_table_insert(window_map, &self->innerleft, self->client); - g_hash_table_insert(window_map, &self->innertop, self->client); - g_hash_table_insert(window_map, &self->innerright, self->client); - g_hash_table_insert(window_map, &self->innerbottom, self->client); - g_hash_table_insert(window_map, &self->innerblb, self->client); - g_hash_table_insert(window_map, &self->innerbll, self->client); - g_hash_table_insert(window_map, &self->innerbrb, self->client); - g_hash_table_insert(window_map, &self->innerbrr, self->client); - g_hash_table_insert(window_map, &self->title, self->client); - g_hash_table_insert(window_map, &self->label, self->client); - g_hash_table_insert(window_map, &self->max, self->client); - g_hash_table_insert(window_map, &self->close, self->client); - g_hash_table_insert(window_map, &self->desk, self->client); - g_hash_table_insert(window_map, &self->shade, self->client); - g_hash_table_insert(window_map, &self->icon, self->client); - g_hash_table_insert(window_map, &self->iconify, self->client); - g_hash_table_insert(window_map, &self->handle, self->client); - g_hash_table_insert(window_map, &self->lgrip, self->client); - g_hash_table_insert(window_map, &self->rgrip, self->client); - g_hash_table_insert(window_map, &self->topresize, self->client); - g_hash_table_insert(window_map, &self->tltresize, self->client); - g_hash_table_insert(window_map, &self->tllresize, self->client); - g_hash_table_insert(window_map, &self->trtresize, self->client); - g_hash_table_insert(window_map, &self->trrresize, self->client); - g_hash_table_insert(window_map, &self->left, self->client); - g_hash_table_insert(window_map, &self->right, self->client); - g_hash_table_insert(window_map, &self->titleleft, self->client); - g_hash_table_insert(window_map, &self->titletop, self->client); - g_hash_table_insert(window_map, &self->titletopleft, self->client); - g_hash_table_insert(window_map, &self->titletopright, self->client); - g_hash_table_insert(window_map, &self->titleright, self->client); - g_hash_table_insert(window_map, &self->titlebottom, self->client); - g_hash_table_insert(window_map, &self->handleleft, self->client); - g_hash_table_insert(window_map, &self->handletop, self->client); - g_hash_table_insert(window_map, &self->handleright, self->client); - g_hash_table_insert(window_map, &self->handlebottom, self->client); - g_hash_table_insert(window_map, &self->lgripleft, self->client); - g_hash_table_insert(window_map, &self->lgriptop, self->client); - g_hash_table_insert(window_map, &self->lgripbottom, self->client); - g_hash_table_insert(window_map, &self->rgripright, self->client); - g_hash_table_insert(window_map, &self->rgriptop, self->client); - g_hash_table_insert(window_map, &self->rgripbottom, self->client); + window_add(&self->window, CLIENT_AS_WINDOW(self->client)); + window_add(&self->backback, CLIENT_AS_WINDOW(self->client)); + window_add(&self->backfront, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innerleft, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innertop, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innerright, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innerbottom, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innerblb, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innerbll, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innerbrb, CLIENT_AS_WINDOW(self->client)); + window_add(&self->innerbrr, CLIENT_AS_WINDOW(self->client)); + window_add(&self->title, CLIENT_AS_WINDOW(self->client)); + window_add(&self->label, CLIENT_AS_WINDOW(self->client)); + window_add(&self->max, CLIENT_AS_WINDOW(self->client)); + window_add(&self->close, CLIENT_AS_WINDOW(self->client)); + window_add(&self->desk, CLIENT_AS_WINDOW(self->client)); + window_add(&self->shade, CLIENT_AS_WINDOW(self->client)); + window_add(&self->icon, CLIENT_AS_WINDOW(self->client)); + window_add(&self->iconify, CLIENT_AS_WINDOW(self->client)); + window_add(&self->handle, CLIENT_AS_WINDOW(self->client)); + window_add(&self->lgrip, CLIENT_AS_WINDOW(self->client)); + window_add(&self->rgrip, CLIENT_AS_WINDOW(self->client)); + window_add(&self->topresize, CLIENT_AS_WINDOW(self->client)); + window_add(&self->tltresize, CLIENT_AS_WINDOW(self->client)); + window_add(&self->tllresize, CLIENT_AS_WINDOW(self->client)); + window_add(&self->trtresize, CLIENT_AS_WINDOW(self->client)); + window_add(&self->trrresize, CLIENT_AS_WINDOW(self->client)); + window_add(&self->left, CLIENT_AS_WINDOW(self->client)); + window_add(&self->right, CLIENT_AS_WINDOW(self->client)); + window_add(&self->titleleft, CLIENT_AS_WINDOW(self->client)); + window_add(&self->titletop, CLIENT_AS_WINDOW(self->client)); + window_add(&self->titletopleft, CLIENT_AS_WINDOW(self->client)); + window_add(&self->titletopright, CLIENT_AS_WINDOW(self->client)); + window_add(&self->titleright, CLIENT_AS_WINDOW(self->client)); + window_add(&self->titlebottom, CLIENT_AS_WINDOW(self->client)); + window_add(&self->handleleft, CLIENT_AS_WINDOW(self->client)); + window_add(&self->handletop, CLIENT_AS_WINDOW(self->client)); + window_add(&self->handleright, CLIENT_AS_WINDOW(self->client)); + window_add(&self->handlebottom, CLIENT_AS_WINDOW(self->client)); + window_add(&self->lgripleft, CLIENT_AS_WINDOW(self->client)); + window_add(&self->lgriptop, CLIENT_AS_WINDOW(self->client)); + window_add(&self->lgripbottom, CLIENT_AS_WINDOW(self->client)); + window_add(&self->rgripright, CLIENT_AS_WINDOW(self->client)); + window_add(&self->rgriptop, CLIENT_AS_WINDOW(self->client)); + window_add(&self->rgripbottom, CLIENT_AS_WINDOW(self->client)); } void frame_release_client(ObFrame *self) @@@ -1034,11 -1035,11 +1034,11 @@@ gboolean reparent = TRUE; /* if there was any animation going on, kill it */ - ob_main_loop_timeout_remove_data(ob_main_loop, frame_animate_iconify, - self, FALSE); + obt_main_loop_timeout_remove_data(ob_main_loop, frame_animate_iconify, + self, FALSE); /* check if the app has already reparented its window away */ - while (XCheckTypedWindowEvent(ob_display, self->client->window, + while (XCheckTypedWindowEvent(obt_display, self->client->window, ReparentNotify, &ev)) { /* This check makes sure we don't catch our own reparent action to @@@ -1050,7 -1051,7 +1050,7 @@@ */ if (ev.xreparent.parent != self->window) { reparent = FALSE; - XPutBackEvent(ob_display, &ev); + XPutBackEvent(obt_display, &ev); break; } } @@@ -1058,58 -1059,60 +1058,58 @@@ if (reparent) { /* according to the ICCCM - if the client doesn't reparent itself, then we will reparent the window to root for them */ - XReparentWindow(ob_display, self->client->window, - RootWindow(ob_display, ob_screen), - self->client->area.x, - self->client->area.y); + XReparentWindow(obt_display, self->client->window, obt_root(ob_screen), + self->client->area.x, self->client->area.y); } /* remove all the windows for the frame from the window_map */ - g_hash_table_remove(window_map, &self->window); - g_hash_table_remove(window_map, &self->backback); - g_hash_table_remove(window_map, &self->backfront); - g_hash_table_remove(window_map, &self->innerleft); - g_hash_table_remove(window_map, &self->innertop); - g_hash_table_remove(window_map, &self->innerright); - g_hash_table_remove(window_map, &self->innerbottom); - g_hash_table_remove(window_map, &self->innerblb); - g_hash_table_remove(window_map, &self->innerbll); - g_hash_table_remove(window_map, &self->innerbrb); - g_hash_table_remove(window_map, &self->innerbrr); - g_hash_table_remove(window_map, &self->title); - g_hash_table_remove(window_map, &self->label); - g_hash_table_remove(window_map, &self->max); - g_hash_table_remove(window_map, &self->close); - g_hash_table_remove(window_map, &self->desk); - g_hash_table_remove(window_map, &self->shade); - g_hash_table_remove(window_map, &self->icon); - g_hash_table_remove(window_map, &self->iconify); - g_hash_table_remove(window_map, &self->handle); - g_hash_table_remove(window_map, &self->lgrip); - g_hash_table_remove(window_map, &self->rgrip); - g_hash_table_remove(window_map, &self->topresize); - g_hash_table_remove(window_map, &self->tltresize); - g_hash_table_remove(window_map, &self->tllresize); - g_hash_table_remove(window_map, &self->trtresize); - g_hash_table_remove(window_map, &self->trrresize); - g_hash_table_remove(window_map, &self->left); - g_hash_table_remove(window_map, &self->right); - g_hash_table_remove(window_map, &self->titleleft); - g_hash_table_remove(window_map, &self->titletop); - g_hash_table_remove(window_map, &self->titletopleft); - g_hash_table_remove(window_map, &self->titletopright); - g_hash_table_remove(window_map, &self->titleright); - g_hash_table_remove(window_map, &self->titlebottom); - g_hash_table_remove(window_map, &self->handleleft); - g_hash_table_remove(window_map, &self->handletop); - g_hash_table_remove(window_map, &self->handleright); - g_hash_table_remove(window_map, &self->handlebottom); - g_hash_table_remove(window_map, &self->lgripleft); - g_hash_table_remove(window_map, &self->lgriptop); - g_hash_table_remove(window_map, &self->lgripbottom); - g_hash_table_remove(window_map, &self->rgripright); - g_hash_table_remove(window_map, &self->rgriptop); - g_hash_table_remove(window_map, &self->rgripbottom); - - ob_main_loop_timeout_remove_data(ob_main_loop, flash_timeout, self, TRUE); + window_remove(self->window); + window_remove(self->backback); + window_remove(self->backfront); + window_remove(self->innerleft); + window_remove(self->innertop); + window_remove(self->innerright); + window_remove(self->innerbottom); + window_remove(self->innerblb); + window_remove(self->innerbll); + window_remove(self->innerbrb); + window_remove(self->innerbrr); + window_remove(self->title); + window_remove(self->label); + window_remove(self->max); + window_remove(self->close); + window_remove(self->desk); + window_remove(self->shade); + window_remove(self->icon); + window_remove(self->iconify); + window_remove(self->handle); + window_remove(self->lgrip); + window_remove(self->rgrip); + window_remove(self->topresize); + window_remove(self->tltresize); + window_remove(self->tllresize); + window_remove(self->trtresize); + window_remove(self->trrresize); + window_remove(self->left); + window_remove(self->right); + window_remove(self->titleleft); + window_remove(self->titletop); + window_remove(self->titletopleft); + window_remove(self->titletopright); + window_remove(self->titleright); + window_remove(self->titlebottom); + window_remove(self->handleleft); + window_remove(self->handletop); + window_remove(self->handleright); + window_remove(self->handlebottom); + window_remove(self->lgripleft); + window_remove(self->lgriptop); + window_remove(self->lgripbottom); + window_remove(self->rgripright); + window_remove(self->rgriptop); + window_remove(self->rgripbottom); + + obt_main_loop_timeout_remove_data(ob_main_loop, flash_timeout, self, TRUE); } /* is there anything present between us and the label? */ @@@ -1133,15 -1136,37 +1133,37 @@@ static gboolean is_button_present(ObFra return FALSE; } + static void place_button(ObFrame *self, const char *lc, gint bwidth, + gint left, gint i, + gint *x, gint *button_on, gint *button_x) + { + if (!(*button_on = is_button_present(self, lc, i))) + return; + + self->label_width -= bwidth; + if (i > 0) + *button_x = *x; + *x += i * bwidth; + if (i < 0) { + if (self->label_x <= left || *x > self->label_x) { + *button_x = *x; + } else { + /* the button would have been drawn on top of another button */ + *button_on = FALSE; + self->label_width += bwidth; + } + } + } + static void layout_title(ObFrame *self) { gchar *lc; gint i; const gint bwidth = ob_rr_theme->button_size + ob_rr_theme->paddingx + 1; - /* position of the left most button */ + /* position of the leftmost button */ const gint left = ob_rr_theme->paddingx + 1; - /* position of the right most button */ + /* position of the rightmost button */ const gint right = self->width; /* turn them all off */ @@@ -1180,53 -1205,23 +1202,23 @@@ break; /* break the for loop, do other side of label */ } else if (*lc == 'N') { if (firstcon) *firstcon = OB_FRAME_CONTEXT_ICON; - if ((self->icon_on = is_button_present(self, lc, i))) { - /* icon is bigger than buttons */ - self->label_width -= bwidth + 2; - if (i > 0) self->icon_x = x; - x += i * (bwidth + 2); - if (i < 0) self->icon_x = x; - } + /* icon is bigger than buttons */ + place_button(self, lc, bwidth + 2, left, i, &x, &self->icon_on, &self->icon_x); } else if (*lc == 'D') { if (firstcon) *firstcon = OB_FRAME_CONTEXT_ALLDESKTOPS; - if ((self->desk_on = is_button_present(self, lc, i))) { - self->label_width -= bwidth; - if (i > 0) self->desk_x = x; - x += i * bwidth; - if (i < 0) self->desk_x = x; - } + place_button(self, lc, bwidth, left, i, &x, &self->desk_on, &self->desk_x); } else if (*lc == 'S') { if (firstcon) *firstcon = OB_FRAME_CONTEXT_SHADE; - if ((self->shade_on = is_button_present(self, lc, i))) { - self->label_width -= bwidth; - if (i > 0) self->shade_x = x; - x += i * bwidth; - if (i < 0) self->shade_x = x; - } + place_button(self, lc, bwidth, left, i, &x, &self->shade_on, &self->shade_x); } else if (*lc == 'I') { if (firstcon) *firstcon = OB_FRAME_CONTEXT_ICONIFY; - if ((self->iconify_on = is_button_present(self, lc, i))) { - self->label_width -= bwidth; - if (i > 0) self->iconify_x = x; - x += i * bwidth; - if (i < 0) self->iconify_x = x; - } + place_button(self, lc, bwidth, left, i, &x, &self->iconify_on, &self->iconify_x); } else if (*lc == 'M') { if (firstcon) *firstcon = OB_FRAME_CONTEXT_MAXIMIZE; - if ((self->max_on = is_button_present(self, lc, i))) { - self->label_width -= bwidth; - if (i > 0) self->max_x = x; - x += i * bwidth; - if (i < 0) self->max_x = x; - } + place_button(self, lc, bwidth, left, i, &x, &self->max_on, &self->max_x); } else if (*lc == 'C') { if (firstcon) *firstcon = OB_FRAME_CONTEXT_CLOSE; - if ((self->close_on = is_button_present(self, lc, i))) { - self->label_width -= bwidth; - if (i > 0) self->close_x = x; - x += i * bwidth; - if (i < 0) self->close_x = x; - } + place_button(self, lc, bwidth, left, i, &x, &self->close_on, &self->close_x); } else continue; /* don't set firstcon */ firstcon = NULL; @@@ -1235,54 -1230,53 +1227,53 @@@ /* position and map the elements */ if (self->icon_on) { - XMapWindow(ob_display, self->icon); - XMoveWindow(ob_display, self->icon, self->icon_x, + XMapWindow(obt_display, self->icon); + XMoveWindow(obt_display, self->icon, self->icon_x, ob_rr_theme->paddingy); } else - XUnmapWindow(ob_display, self->icon); + XUnmapWindow(obt_display, self->icon); if (self->desk_on) { - XMapWindow(ob_display, self->desk); - XMoveWindow(ob_display, self->desk, self->desk_x, + XMapWindow(obt_display, self->desk); + XMoveWindow(obt_display, self->desk, self->desk_x, ob_rr_theme->paddingy + 1); } else - XUnmapWindow(ob_display, self->desk); + XUnmapWindow(obt_display, self->desk); if (self->shade_on) { - XMapWindow(ob_display, self->shade); - XMoveWindow(ob_display, self->shade, self->shade_x, + XMapWindow(obt_display, self->shade); + XMoveWindow(obt_display, self->shade, self->shade_x, ob_rr_theme->paddingy + 1); } else - XUnmapWindow(ob_display, self->shade); + XUnmapWindow(obt_display, self->shade); if (self->iconify_on) { - XMapWindow(ob_display, self->iconify); - XMoveWindow(ob_display, self->iconify, self->iconify_x, + XMapWindow(obt_display, self->iconify); + XMoveWindow(obt_display, self->iconify, self->iconify_x, ob_rr_theme->paddingy + 1); } else - XUnmapWindow(ob_display, self->iconify); + XUnmapWindow(obt_display, self->iconify); if (self->max_on) { - XMapWindow(ob_display, self->max); - XMoveWindow(ob_display, self->max, self->max_x, + XMapWindow(obt_display, self->max); + XMoveWindow(obt_display, self->max, self->max_x, ob_rr_theme->paddingy + 1); } else - XUnmapWindow(ob_display, self->max); + XUnmapWindow(obt_display, self->max); if (self->close_on) { - XMapWindow(ob_display, self->close); - XMoveWindow(ob_display, self->close, self->close_x, + XMapWindow(obt_display, self->close); + XMoveWindow(obt_display, self->close, self->close_x, ob_rr_theme->paddingy + 1); } else - XUnmapWindow(ob_display, self->close); + XUnmapWindow(obt_display, self->close); - if (self->label_on) { - self->label_width = MAX(1, self->label_width); /* no lower than 1 */ + if (self->label_on && self->label_width > 0) { - XMapWindow(ob_display, self->label); - XMoveWindow(ob_display, self->label, self->label_x, + XMapWindow(obt_display, self->label); + XMoveWindow(obt_display, self->label, self->label_x, ob_rr_theme->paddingy); } else - XUnmapWindow(ob_display, self->label); + XUnmapWindow(obt_display, self->label); } ObFrameContext frame_context_from_string(const gchar *name) @@@ -1337,7 -1331,7 +1328,7 @@@ ObFrameContext frame_context(ObClient * if (moveresize_in_progress) return OB_FRAME_CONTEXT_MOVE_RESIZE; - if (win == RootWindow(ob_display, ob_screen)) + if (win == obt_root(ob_screen)) return OB_FRAME_CONTEXT_ROOT ; if (client == NULL) return OB_FRAME_CONTEXT_NONE; if (win == client->window) { @@@ -1630,12 -1624,12 +1621,12 @@@ void frame_flash_start(ObFrame *self self->flash_on = self->focused; if (!self->flashing) - ob_main_loop_timeout_add(ob_main_loop, - G_USEC_PER_SEC * 0.6, - flash_timeout, - self, - g_direct_equal, - flash_done); + obt_main_loop_timeout_add(ob_main_loop, + G_USEC_PER_SEC * 0.6, + flash_timeout, + self, + g_direct_equal, + flash_done); g_get_current_time(&self->flash_end); g_time_val_add(&self->flash_end, G_USEC_PER_SEC * 5); @@@ -1721,8 -1715,8 +1712,8 @@@ static gboolean frame_animate_iconify(g h = self->size.top; /* just the titlebar */ } - XMoveResizeWindow(ob_display, self->window, x, y, w, h); - XFlush(ob_display); + XMoveResizeWindow(obt_display, self->window, x, y, w, h); + XFlush(obt_display); if (time == 0) frame_end_iconify_animation(self); @@@ -1736,7 -1730,7 +1727,7 @@@ void frame_end_iconify_animation(ObFram if (self->iconify_animation_going == 0) return; if (!self->visible) - XUnmapWindow(ob_display, self->window); + XUnmapWindow(obt_display, self->window); else { /* Send a ConfigureNotify when the animation is done, this fixes KDE's pager showing the window in the wrong place. since the @@@ -1749,12 -1743,12 +1740,12 @@@ /* we're not animating any more ! */ self->iconify_animation_going = 0; - XMoveResizeWindow(ob_display, self->window, + XMoveResizeWindow(obt_display, self->window, self->area.x, self->area.y, self->area.width, self->area.height); /* we delay re-rendering until after we're done animating */ framerender_frame(self); - XFlush(ob_display); + XFlush(obt_display); } void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying) @@@ -1793,18 -1787,18 +1784,18 @@@ } if (new_anim) { - ob_main_loop_timeout_remove_data(ob_main_loop, frame_animate_iconify, - self, FALSE); - ob_main_loop_timeout_add(ob_main_loop, - FRAME_ANIMATE_ICONIFY_STEP_TIME, - frame_animate_iconify, self, - g_direct_equal, NULL); + obt_main_loop_timeout_remove_data(ob_main_loop, frame_animate_iconify, + self, FALSE); + obt_main_loop_timeout_add(ob_main_loop, + FRAME_ANIMATE_ICONIFY_STEP_TIME, + frame_animate_iconify, self, + g_direct_equal, NULL); /* do the first step */ frame_animate_iconify(self); /* show it during the animation even if it is not "visible" */ if (!self->visible) - XMapWindow(ob_display, self->window); + XMapWindow(obt_display, self->window); } } diff --combined openbox/keyboard.c index 5ac42363,e62cff8a..a693a71c --- a/openbox/keyboard.c +++ b/openbox/keyboard.c @@@ -17,6 -17,7 +17,6 @@@ See the COPYING file for a copy of the GNU General Public License. */ -#include "mainloop.h" #include "focus.h" #include "screen.h" #include "frame.h" @@@ -25,6 -26,7 +25,6 @@@ #include "grab.h" #include "client.h" #include "actions.h" -#include "prop.h" #include "menuframe.h" #include "config.h" #include "keytree.h" @@@ -44,20 -46,20 +44,20 @@@ static void grab_keys(gboolean grab { KeyBindingTree *p; - ungrab_all_keys(RootWindow(ob_display, ob_screen)); + ungrab_all_keys(obt_root(ob_screen)); if (grab) { p = curpos ? curpos->first_child : keyboard_firstnode; while (p) { if (p->key) - grab_key(p->key, p->state, RootWindow(ob_display, ob_screen), + grab_key(p->key, p->state, obt_root(ob_screen), GrabModeSync); p = p->next_sibling; } if (curpos) grab_key(config_keyboard_reset_keycode, config_keyboard_reset_state, - RootWindow(ob_display, ob_screen), GrabModeSync); + obt_root(ob_screen), GrabModeSync); } } @@@ -219,7 -221,7 +219,7 @@@ void keyboard_event(ObClient *client, c if (e->xkey.keycode == config_keyboard_reset_keycode && e->xkey.state == config_keyboard_reset_state) { - ob_main_loop_timeout_remove(ob_main_loop, chain_timeout); + obt_main_loop_timeout_remove(ob_main_loop, chain_timeout); keyboard_reset_chains(-1); return; } @@@ -237,11 -239,11 +237,11 @@@ menu_frame_hide_all(); if (p->first_child != NULL) { /* part of a chain */ - ob_main_loop_timeout_remove(ob_main_loop, chain_timeout); + obt_main_loop_timeout_remove(ob_main_loop, chain_timeout); /* 3 second timeout for chains */ - ob_main_loop_timeout_add(ob_main_loop, 3 * G_USEC_PER_SEC, - chain_timeout, NULL, - g_direct_equal, NULL); + obt_main_loop_timeout_add(ob_main_loop, 3 * G_USEC_PER_SEC, + chain_timeout, NULL, + g_direct_equal, NULL); set_curpos(p); } else if (p->chroot) /* an empty chroot */ set_curpos(p); @@@ -262,7 -264,7 +262,7 @@@ p = p->next_sibling; } - XAllowEvents(ob_display, AsyncKeyboard, event_curtime); + XAllowEvents(obt_display, AsyncKeyboard, event_curtime); } static void node_rebind(KeyBindingTree *node) @@@ -316,7 -318,7 +316,7 @@@ void keyboard_startup(gboolean reconfig void keyboard_shutdown(gboolean reconfig) { - ob_main_loop_timeout_remove(ob_main_loop, chain_timeout); + obt_main_loop_timeout_remove(ob_main_loop, chain_timeout); keyboard_unbind_all(); set_curpos(NULL); @@@ -324,4 -326,3 +324,3 @@@ popup_free(popup); popup = NULL; } - diff --combined openbox/menu.c index 432aa2be,23a0527a..f7d50e39 --- a/openbox/menu.c +++ b/openbox/menu.c @@@ -20,6 -20,7 +20,6 @@@ #include "debug.h" #include "menu.h" #include "openbox.h" -#include "mainloop.h" #include "stacking.h" #include "grab.h" #include "client.h" @@@ -34,8 -35,7 +34,8 @@@ #include "client_list_menu.h" #include "client_list_combined_menu.h" #include "gettext.h" -#include "parser/parse.h" +#include "obt/parse.h" +#include "obt/paths.h" typedef struct _ObMenuParseState ObMenuParseState; @@@ -46,19 -46,22 +46,18 @@@ struct _ObMenuParseStat }; static GHashTable *menu_hash = NULL; -static ObParseInst *menu_parse_inst; +static ObtParseInst *menu_parse_inst; static ObMenuParseState menu_parse_state; static gboolean menu_can_hide = FALSE; static void menu_destroy_hash_value(ObMenu *self); -static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data); -static void parse_menu_separator(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node, - gpointer data); -static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data); +static void parse_menu_item(xmlNodePtr node, gpointer data); +static void parse_menu_separator(xmlNodePtr node, gpointer data); +static void parse_menu(xmlNodePtr node, gpointer data); static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut, gchar **strippedlabel, guint *position, gboolean *always_show); - static void client_dest(ObClient *client, gpointer data) { /* menus can be associated with a client, so close any that are since @@@ -68,6 -71,8 +67,6 @@@ void menu_startup(gboolean reconfig) { - xmlDocPtr doc; - xmlNodePtr node; gboolean loaded = FALSE; GSList *it; @@@ -78,37 -83,29 +77,37 @@@ client_list_combined_menu_startup(reconfig); client_menu_startup(); - menu_parse_inst = parse_startup(); + menu_parse_inst = obt_parse_instance_new(); menu_parse_state.parent = NULL; menu_parse_state.pipe_creator = NULL; - parse_register(menu_parse_inst, "menu", parse_menu, &menu_parse_state); - parse_register(menu_parse_inst, "item", parse_menu_item, - &menu_parse_state); - parse_register(menu_parse_inst, "separator", - parse_menu_separator, &menu_parse_state); + obt_parse_register(menu_parse_inst, "menu", parse_menu, &menu_parse_state); + obt_parse_register(menu_parse_inst, "item", parse_menu_item, + &menu_parse_state); + obt_parse_register(menu_parse_inst, "separator", + parse_menu_separator, &menu_parse_state); for (it = config_menu_files; it; it = g_slist_next(it)) { - if (parse_load_menu(it->data, &doc, &node)) { + if (obt_parse_load_config_file(menu_parse_inst, + "openbox", + it->data, + "openbox_menu")) + { loaded = TRUE; - parse_tree(menu_parse_inst, doc, node->children); - xmlFreeDoc(doc); + obt_parse_tree_from_root(menu_parse_inst); + obt_parse_close(menu_parse_inst); } else g_message(_("Unable to find a valid menu file \"%s\""), (const gchar*)it->data); } if (!loaded) { - if (parse_load_menu("menu.xml", &doc, &node)) { - parse_tree(menu_parse_inst, doc, node->children); - xmlFreeDoc(doc); + if (obt_parse_load_config_file(menu_parse_inst, + "openbox", + "menu.xml", + "openbox_menu")) + { + obt_parse_tree_from_root(menu_parse_inst); + obt_parse_close(menu_parse_inst); } else g_message(_("Unable to find a valid menu file \"%s\""), "menu.xml"); @@@ -125,7 -122,7 +124,7 @@@ void menu_shutdown(gboolean reconfig if (!reconfig) client_remove_destroy_notify(client_dest); - parse_shutdown(menu_parse_inst); + obt_parse_instance_unref(menu_parse_inst); menu_parse_inst = NULL; client_list_menu_shutdown(reconfig); @@@ -159,6 -156,8 +158,6 @@@ void menu_clear_pipe_caches(void void menu_pipe_execute(ObMenu *self) { - xmlDocPtr doc; - xmlNodePtr node; gchar *output; GError *err = NULL; @@@ -174,13 -173,13 +173,13 @@@ return; } - if (parse_load_mem(output, strlen(output), - "openbox_pipe_menu", &doc, &node)) + if (obt_parse_load_mem(menu_parse_inst, output, strlen(output), + "openbox_pipe_menu")) { menu_parse_state.pipe_creator = self; menu_parse_state.parent = self; - parse_tree(menu_parse_inst, doc, node->children); - xmlFreeDoc(doc); + obt_parse_tree_from_root(menu_parse_inst); + obt_parse_close(menu_parse_inst); } else { g_message(_("Invalid output from pipe-menu \"%s\""), self->execute); } @@@ -263,18 -262,19 +262,18 @@@ static gunichar parse_shortcut(const gc return shortcut; } -static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_menu_item(xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; gchar *label; if (state->parent) { - if (parse_attr_string("label", node, &label)) { + if (obt_parse_attr_string(node, "label", &label)) { GSList *acts = NULL; for (node = node->children; node; node = node->next) if (!xmlStrcasecmp(node->name, (const xmlChar*) "action")) { - ObActionsAct *a = actions_parse(i, doc, node); + ObActionsAct *a = actions_parse(node); if (a) acts = g_slist_append(acts, a); } @@@ -284,14 -284,16 +283,14 @@@ } } -static void parse_menu_separator(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_menu_separator(xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; if (state->parent) { gchar *label; - if (!parse_attr_string("label", node, &label)) + if (!obt_parse_attr_string(node, "label", &label)) label = NULL; menu_add_separator(state->parent, -1, label); @@@ -299,29 -301,30 +298,29 @@@ } } -static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_menu(xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; gchar *name = NULL, *title = NULL, *script = NULL; ObMenu *menu; - if (!parse_attr_string("id", node, &name)) + if (!obt_parse_attr_string(node, "id", &name)) goto parse_menu_fail; if (!g_hash_table_lookup(menu_hash, name)) { - if (!parse_attr_string("label", node, &title)) + if (!obt_parse_attr_string(node, "label", &title)) goto parse_menu_fail; if ((menu = menu_new(name, title, TRUE, NULL))) { menu->pipe_creator = state->pipe_creator; - if (parse_attr_string("execute", node, &script)) { - menu->execute = parse_expand_tilde(script); + if (obt_parse_attr_string(node, "execute", &script)) { + menu->execute = obt_paths_expand_tilde(script); } else { ObMenu *old; old = state->parent; state->parent = menu; - parse_tree(i, doc, node->children); + obt_parse_tree(menu_parse_inst, node->children); state->parent = old; } } @@@ -453,10 -456,10 +452,10 @@@ void menu_show(gchar *name, gint x, gin menu_can_hide = TRUE; else { menu_can_hide = FALSE; - ob_main_loop_timeout_add(ob_main_loop, - config_menu_hide_delay * 1000, - menu_hide_delay_func, - NULL, g_direct_equal, NULL); + obt_main_loop_timeout_add(ob_main_loop, + config_menu_hide_delay * 1000, + menu_hide_delay_func, + NULL, g_direct_equal, NULL); } } } diff --combined openbox/menuframe.c index 7b4c872b,a9b54408..1e767e96 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@@ -21,11 -21,12 +21,11 @@@ #include "client.h" #include "menu.h" #include "screen.h" -#include "prop.h" #include "actions.h" #include "grab.h" #include "openbox.h" -#include "mainloop.h" #include "config.h" +#include "obt/prop.h" #include "render/theme.h" #define PADDING 2 @@@ -53,7 -54,7 +53,7 @@@ static void menu_frame_hide(ObMenuFram static Window createWindow(Window parent, gulong mask, XSetWindowAttributes *attrib) { - return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0, + return XCreateWindow(obt_display, parent, 0, 0, 1, 1, 0, RrDepth(ob_rr_inst), InputOutput, RrVisual(ob_rr_inst), mask, attrib); } @@@ -90,7 -91,7 +90,7 @@@ ObMenuFrame* menu_frame_new(ObMenu *men XSetWindowAttributes attr; self = g_new0(ObMenuFrame, 1); - self->type = Window_Menu; + self->obwin.type = OB_WINDOW_CLASS_MENUFRAME; self->menu = menu; self->selected = NULL; self->client = client; @@@ -98,21 -99,20 +98,21 @@@ self->show_from = show_from; attr.event_mask = FRAME_EVENTMASK; - self->window = createWindow(RootWindow(ob_display, ob_screen), + self->window = createWindow(obt_root(ob_screen), CWEventMask, &attr); /* make it a popup menu type window */ - PROP_SET32(self->window, net_wm_window_type, atom, - prop_atoms.net_wm_window_type_popup_menu); + OBT_PROP_SET32(self->window, NET_WM_WINDOW_TYPE, ATOM, + OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_POPUP_MENU)); - XSetWindowBorderWidth(ob_display, self->window, ob_rr_theme->mbwidth); - XSetWindowBorder(ob_display, self->window, + XSetWindowBorderWidth(obt_display, self->window, ob_rr_theme->mbwidth); + XSetWindowBorder(obt_display, self->window, RrColorPixel(ob_rr_theme->menu_border_color)); self->a_items = RrAppearanceCopy(ob_rr_theme->a_menu); - stacking_add(MENU_AS_WINDOW(self)); + window_add(&self->window, MENUFRAME_AS_WINDOW(self)); + stacking_add(MENUFRAME_AS_WINDOW(self)); return self; } @@@ -125,12 -125,11 +125,12 @@@ void menu_frame_free(ObMenuFrame *self self->entries = g_list_delete_link(self->entries, self->entries); } - stacking_remove(MENU_AS_WINDOW(self)); + stacking_remove(MENUFRAME_AS_WINDOW(self)); + window_remove(self->window); RrAppearanceFree(self->a_items); - XDestroyWindow(ob_display, self->window); + XDestroyWindow(obt_display, self->window); g_free(self); } @@@ -162,10 -161,8 +162,10 @@@ static ObMenuEntryFrame* menu_entry_fra g_hash_table_insert(menu_frame_map, &self->bullet, self); } - XMapWindow(ob_display, self->window); - XMapWindow(ob_display, self->text); + XMapWindow(obt_display, self->window); + XMapWindow(obt_display, self->text); + + window_add(&self->window, MENUFRAME_AS_WINDOW(self->frame)); return self; } @@@ -175,18 -172,16 +175,18 @@@ static void menu_entry_frame_free(ObMen if (self) { menu_entry_unref(self->entry); - XDestroyWindow(ob_display, self->text); - XDestroyWindow(ob_display, self->window); + window_remove(self->window); + + XDestroyWindow(obt_display, self->text); + XDestroyWindow(obt_display, self->window); g_hash_table_remove(menu_frame_map, &self->text); g_hash_table_remove(menu_frame_map, &self->window); if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) { - XDestroyWindow(ob_display, self->icon); + XDestroyWindow(obt_display, self->icon); g_hash_table_remove(menu_frame_map, &self->icon); } if (self->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) { - XDestroyWindow(ob_display, self->bullet); + XDestroyWindow(obt_display, self->bullet); g_hash_table_remove(menu_frame_map, &self->bullet); } @@@ -197,7 -192,7 +197,7 @@@ void menu_frame_move(ObMenuFrame *self, gint x, gint y) { RECT_SET_POINT(self->area, x, y); - XMoveWindow(ob_display, self->window, self->area.x, self->area.y); + XMoveWindow(obt_display, self->window, self->area.x, self->area.y); } static void menu_frame_place_topmenu(ObMenuFrame *self, gint *x, gint *y) @@@ -359,7 -354,7 +359,7 @@@ static void menu_entry_frame_render(ObM } RECT_SET_SIZE(self->area, self->frame->inner_w, th); - XResizeWindow(ob_display, self->window, + XResizeWindow(obt_display, self->window, self->area.width, self->area.height); item_a->surface.parent = self->frame->a_items; item_a->surface.parentx = self->area.x; @@@ -418,7 -413,7 +418,7 @@@ switch (self->entry->type) { case OB_MENU_ENTRY_TYPE_NORMAL: - XMoveResizeWindow(ob_display, self->text, + XMoveResizeWindow(obt_display, self->text, self->frame->text_x, PADDING, self->frame->text_w, ITEM_HEIGHT - 2*PADDING); @@@ -429,7 -424,7 +429,7 @@@ ITEM_HEIGHT - 2*PADDING); break; case OB_MENU_ENTRY_TYPE_SUBMENU: - XMoveResizeWindow(ob_display, self->text, + XMoveResizeWindow(obt_display, self->text, self->frame->text_x, PADDING, self->frame->text_w - ITEM_HEIGHT, ITEM_HEIGHT - 2*PADDING); @@@ -442,7 -437,7 +442,7 @@@ case OB_MENU_ENTRY_TYPE_SEPARATOR: if (self->entry->data.separator.label != NULL) { /* labeled separator */ - XMoveResizeWindow(ob_display, self->text, + XMoveResizeWindow(obt_display, self->text, ob_rr_theme->paddingx, ob_rr_theme->paddingy, self->area.width - 2*ob_rr_theme->paddingx, ob_rr_theme->menu_title_height - @@@ -458,7 -453,7 +458,7 @@@ gint i; /* unlabeled separator */ - XMoveResizeWindow(ob_display, self->text, 0, 0, + XMoveResizeWindow(obt_display, self->text, 0, 0, self->area.width, ob_rr_theme->menu_sep_width + 2*ob_rr_theme->menu_sep_paddingy); @@@ -489,7 -484,7 +489,7 @@@ { RrAppearance *clear; - XMoveResizeWindow(ob_display, self->icon, + XMoveResizeWindow(obt_display, self->icon, PADDING, frame->item_margin.top, ITEM_HEIGHT - frame->item_margin.top - frame->item_margin.bottom, @@@ -511,14 -506,14 +511,14 @@@ - frame->item_margin.bottom, ITEM_HEIGHT - frame->item_margin.top - frame->item_margin.bottom); - XMapWindow(ob_display, self->icon); + XMapWindow(obt_display, self->icon); } else if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && self->entry->data.normal.mask) { RrColor *c; RrAppearance *clear; - XMoveResizeWindow(ob_display, self->icon, + XMoveResizeWindow(obt_display, self->icon, PADDING, frame->item_margin.top, ITEM_HEIGHT - frame->item_margin.top - frame->item_margin.bottom, @@@ -551,13 -546,13 +551,13 @@@ - frame->item_margin.bottom, ITEM_HEIGHT - frame->item_margin.top - frame->item_margin.bottom); - XMapWindow(ob_display, self->icon); + XMapWindow(obt_display, self->icon); } else - XUnmapWindow(ob_display, self->icon); + XUnmapWindow(obt_display, self->icon); if (self->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) { RrAppearance *bullet_a; - XMoveResizeWindow(ob_display, self->bullet, + XMoveResizeWindow(obt_display, self->bullet, self->frame->text_x + self->frame->text_w - ITEM_HEIGHT + PADDING, PADDING, ITEM_HEIGHT - 2*PADDING, @@@ -572,11 -567,11 +572,11 @@@ RrPaint(bullet_a, self->bullet, ITEM_HEIGHT - 2*PADDING, ITEM_HEIGHT - 2*PADDING); - XMapWindow(ob_display, self->bullet); + XMapWindow(obt_display, self->bullet); } else - XUnmapWindow(ob_display, self->bullet); + XUnmapWindow(obt_display, self->bullet); - XFlush(ob_display); + XFlush(obt_display); } /*! this code is taken from the menu_frame_render. if that changes, this won't @@@ -695,13 -690,12 +695,12 @@@ void menu_frame_render(ObMenuFrame *sel } RECT_SET_POINT(e->area, 0, h+e->border); - XMoveWindow(ob_display, e->window, + XMoveWindow(obt_display, e->window, e->area.x-e->border, e->area.y-e->border); - XSetWindowBorderWidth(ob_display, e->window, e->border); - XSetWindowBorder(ob_display, e->window, + XSetWindowBorderWidth(obt_display, e->window, e->border); + XSetWindowBorder(obt_display, e->window, RrColorPixel(ob_rr_theme->menu_border_color)); - text_a = (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && !e->entry->data.normal.enabled ? /* disabled */ @@@ -781,7 -775,7 +780,7 @@@ if (!w) w = 10; if (!h) h = 3; - XResizeWindow(ob_display, self->window, w, h); + XResizeWindow(obt_display, self->window, w, h); self->inner_w = w; @@@ -795,7 -789,7 +794,7 @@@ RECT_SET_SIZE(self->area, w, h); - XFlush(ob_display); + XFlush(obt_display); } static void menu_frame_update(ObMenuFrame *self) @@@ -977,7 -971,7 +976,7 @@@ gboolean menu_frame_show_topmenu(ObMenu menu_frame_move(self, x, y); - XMapWindow(ob_display, self->window); + XMapWindow(obt_display, self->window); if (screen_pointer_pos(&px, &py)) { ObMenuEntryFrame *e = menu_entry_frame_under(px, py); @@@ -1020,7 -1014,7 +1019,7 @@@ gboolean menu_frame_show_submenu(ObMenu } menu_frame_move(self, x + dx, y + dy); - XMapWindow(ob_display, self->window); + XMapWindow(obt_display, self->window); if (screen_pointer_pos(&px, &py)) { ObMenuEntryFrame *e = menu_entry_frame_under(px, py); @@@ -1057,7 -1051,7 +1056,7 @@@ static void menu_frame_hide(ObMenuFram ungrab_keyboard(); } - XUnmapWindow(ob_display, self->window); + XUnmapWindow(obt_display, self->window); menu_frame_free(self); } @@@ -1068,8 -1062,8 +1067,8 @@@ void menu_frame_hide_all(void if (config_submenu_show_delay) { /* remove any submenu open requests */ - ob_main_loop_timeout_remove(ob_main_loop, - menu_entry_frame_submenu_timeout); + obt_main_loop_timeout_remove(ob_main_loop, + menu_entry_frame_submenu_timeout); } if ((it = g_list_last(menu_frame_visible))) menu_frame_hide(it->data); @@@ -1083,15 -1077,14 +1082,14 @@@ void menu_frame_hide_all_client(ObClien if (f->client == client) { if (config_submenu_show_delay) { /* remove any submenu open requests */ - ob_main_loop_timeout_remove(ob_main_loop, - menu_entry_frame_submenu_timeout); + obt_main_loop_timeout_remove(ob_main_loop, + menu_entry_frame_submenu_timeout); } menu_frame_hide(f); } } } - ObMenuFrame* menu_frame_under(gint x, gint y) { ObMenuFrame *ret = NULL; @@@ -1150,8 -1143,8 +1148,8 @@@ void menu_frame_select(ObMenuFrame *sel if (config_submenu_show_delay) { /* remove any submenu open requests */ - ob_main_loop_timeout_remove(ob_main_loop, - menu_entry_frame_submenu_timeout); + obt_main_loop_timeout_remove(ob_main_loop, + menu_entry_frame_submenu_timeout); } self->selected = entry; @@@ -1167,11 -1160,11 +1165,11 @@@ if (self->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) { if (config_submenu_show_delay && !immediate) { /* initiate a new submenu open request */ - ob_main_loop_timeout_add(ob_main_loop, - config_submenu_show_delay * 1000, - menu_entry_frame_submenu_timeout, - self->selected, g_direct_equal, - NULL); + obt_main_loop_timeout_add(ob_main_loop, + config_submenu_show_delay * 1000, + menu_entry_frame_submenu_timeout, + self->selected, g_direct_equal, + NULL); } else { menu_entry_frame_show_submenu(self->selected); } diff --combined openbox/moveresize.c index ddc518ad,c023340e..f501996b --- a/openbox/moveresize.c +++ b/openbox/moveresize.c @@@ -20,20 -20,21 +20,20 @@@ #include "grab.h" #include "framerender.h" #include "screen.h" -#include "prop.h" #include "client.h" #include "frame.h" #include "openbox.h" #include "resist.h" -#include "mainloop.h" -#include "modkeys.h" #include "popup.h" #include "moveresize.h" #include "config.h" #include "event.h" #include "debug.h" -#include "extensions.h" #include "render/render.h" #include "render/theme.h" +#include "obt/display.h" +#include "obt/prop.h" +#include "obt/keyboard.h" #include #include @@@ -167,8 -168,8 +167,8 @@@ static void popup_coords(ObClient *c, c void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr) { ObCursor cur; - gboolean mv = (cnr == prop_atoms.net_wm_moveresize_move || - cnr == prop_atoms.net_wm_moveresize_move_keyboard); + gboolean mv = (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE) || + cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE_KEYBOARD)); gint up = 1; gint left = 1; @@@ -178,37 -179,32 +178,37 @@@ (c->functions & OB_CLIENT_FUNC_RESIZE))) return; - if (cnr == prop_atoms.net_wm_moveresize_size_topleft) { + if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPLEFT)) { cur = OB_CURSOR_NORTHWEST; up = left = -1; - } else if (cnr == prop_atoms.net_wm_moveresize_size_top) { + } + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOP)) { cur = OB_CURSOR_NORTH; up = -1; - } else if (cnr == prop_atoms.net_wm_moveresize_size_topright) { + } + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPRIGHT)) { cur = OB_CURSOR_NORTHEAST; up = -1; - } else if (cnr == prop_atoms.net_wm_moveresize_size_right) + } + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_RIGHT)) cur = OB_CURSOR_EAST; - else if (cnr == prop_atoms.net_wm_moveresize_size_bottomright) + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT)) cur = OB_CURSOR_SOUTHEAST; - else if (cnr == prop_atoms.net_wm_moveresize_size_bottom) + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOM)) cur = OB_CURSOR_SOUTH; - else if (cnr == prop_atoms.net_wm_moveresize_size_bottomleft) { + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT)) { cur = OB_CURSOR_SOUTHWEST; left = -1; - } else if (cnr == prop_atoms.net_wm_moveresize_size_left) { + } + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_LEFT)) { cur = OB_CURSOR_WEST; left = -1; - } else if (cnr == prop_atoms.net_wm_moveresize_size_keyboard) + } + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_KEYBOARD)) cur = OB_CURSOR_SOUTHEAST; - else if (cnr == prop_atoms.net_wm_moveresize_move) + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE)) cur = OB_CURSOR_MOVE; - else if (cnr == prop_atoms.net_wm_moveresize_move_keyboard) + else if (cnr == OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE_KEYBOARD)) cur = OB_CURSOR_MOVE; else g_assert_not_reached(); @@@ -255,7 -251,7 +255,7 @@@ moveresize_in_progress = TRUE; #ifdef SYNC - if (config_resize_redraw && !moving && extensions_sync && + if (config_resize_redraw && !moving && obt_display_extension_sync && moveresize_client->sync_request && moveresize_client->sync_counter && !moveresize_client->not_responding) { @@@ -267,7 -263,7 +267,7 @@@ /* set the counter to an initial value */ XSyncIntToValue(&val, 0); - XSyncSetCounter(ob_display, moveresize_client->sync_counter, val); + XSyncSetCounter(obt_display, moveresize_client->sync_counter, val); /* this will be incremented when we tell the client what we're looking for */ @@@ -283,7 -279,7 +283,7 @@@ aa.trigger.test_type = XSyncPositiveTransition; aa.events = True; XSyncIntToValue(&aa.delta, 1); - moveresize_alarm = XSyncCreateAlarm(ob_display, + moveresize_alarm = XSyncCreateAlarm(obt_display, XSyncCACounter | XSyncCAValue | XSyncCAValueType | @@@ -312,11 -308,11 +312,11 @@@ void moveresize_end(gboolean cancel #ifdef SYNC /* turn off the alarm */ if (moveresize_alarm != None) { - XSyncDestroyAlarm(ob_display, moveresize_alarm); + XSyncDestroyAlarm(obt_display, moveresize_alarm); moveresize_alarm = None; } - ob_main_loop_timeout_remove(ob_main_loop, sync_timeout_func); + obt_main_loop_timeout_remove(ob_main_loop, sync_timeout_func); #endif client_configure(moveresize_client, @@@ -352,7 -348,6 +352,6 @@@ static void do_move(gboolean keyboard, moveresize_client->frame->area.y); } - static void do_resize(void) { gint x, y, w, h, lw, lh; @@@ -371,7 -366,7 +370,7 @@@ } #ifdef SYNC - if (config_resize_redraw && extensions_sync && + if (config_resize_redraw && obt_display_extension_sync && moveresize_client->sync_request && moveresize_client->sync_counter && !moveresize_client->not_responding) { @@@ -388,24 -383,24 +387,24 @@@ /* tell the client what we're waiting for */ ce.xclient.type = ClientMessage; - ce.xclient.message_type = prop_atoms.wm_protocols; - ce.xclient.display = ob_display; + ce.xclient.message_type = OBT_PROP_ATOM(WM_PROTOCOLS); + ce.xclient.display = obt_display; ce.xclient.window = moveresize_client->window; ce.xclient.format = 32; - ce.xclient.data.l[0] = prop_atoms.net_wm_sync_request; + ce.xclient.data.l[0] = OBT_PROP_ATOM(NET_WM_SYNC_REQUEST); ce.xclient.data.l[1] = event_curtime; ce.xclient.data.l[2] = XSyncValueLow32(val); ce.xclient.data.l[3] = XSyncValueHigh32(val); ce.xclient.data.l[4] = 0l; - XSendEvent(ob_display, moveresize_client->window, FALSE, + XSendEvent(obt_display, moveresize_client->window, FALSE, NoEventMask, &ce); waiting_for_sync = TRUE; - ob_main_loop_timeout_remove(ob_main_loop, sync_timeout_func); - ob_main_loop_timeout_add(ob_main_loop, G_USEC_PER_SEC * 2, - sync_timeout_func, - NULL, NULL, NULL); + obt_main_loop_timeout_remove(ob_main_loop, sync_timeout_func); + obt_main_loop_timeout_add(ob_main_loop, G_USEC_PER_SEC * 2, + sync_timeout_func, + NULL, NULL, NULL); } #endif @@@ -584,10 -579,10 +583,10 @@@ static void do_edge_warp(gint x, gint y cancel_edge_warp(); if (dir != (ObDirection)-1) { edge_warp_odd = TRUE; /* switch on the first timeout */ - ob_main_loop_timeout_add(ob_main_loop, - config_mouse_screenedgetime * 1000, - edge_warp_delay_func, - NULL, NULL, NULL); + obt_main_loop_timeout_add(ob_main_loop, + config_mouse_screenedgetime * 1000, + edge_warp_delay_func, + NULL, NULL, NULL); } edge_warp_dir = dir; } @@@ -595,7 -590,7 +594,7 @@@ static void cancel_edge_warp(void) { - ob_main_loop_timeout_remove(ob_main_loop, edge_warp_delay_func); + obt_main_loop_timeout_remove(ob_main_loop, edge_warp_delay_func); } static void move_with_keys(gint keycode, gint state) @@@ -605,7 -600,7 +604,7 @@@ gint dist = 0; /* shift means jump to edge */ - if (state & modkeys_key_to_mask(OB_MODKEY_KEY_SHIFT)) { + if (state & obt_keyboard_modkey_to_modmask(OBT_KEYBOARD_MODKEY_SHIFT)) { gint x, y; ObDirection dir; @@@ -623,11 -618,8 +622,11 @@@ dy = y - moveresize_client->area.y; } else { /* control means fine grained */ - if (state & modkeys_key_to_mask(OB_MODKEY_KEY_CONTROL)) + if (state & + obt_keyboard_modkey_to_modmask(OBT_KEYBOARD_MODKEY_CONTROL)) + { dist = 1; + } else dist = KEY_DIST; @@@ -642,12 -634,12 +641,12 @@@ } screen_pointer_pos(&opx, &opy); - XWarpPointer(ob_display, None, None, 0, 0, 0, 0, dx, dy); + XWarpPointer(obt_display, None, None, 0, 0, 0, 0, dx, dy); /* steal the motion events this causes */ - XSync(ob_display, FALSE); + XSync(obt_display, FALSE); { XEvent ce; - while (XCheckTypedEvent(ob_display, MotionNotify, &ce)); + while (XCheckTypedEvent(obt_display, MotionNotify, &ce)); } screen_pointer_pos(&px, &py); @@@ -708,7 -700,7 +707,7 @@@ static void resize_with_keys(gint keyco } /* shift means jump to edge */ - if (state & modkeys_key_to_mask(OB_MODKEY_KEY_SHIFT)) { + if (state & obt_keyboard_modkey_to_modmask(OBT_KEYBOARD_MODKEY_SHIFT)) { gint x, y, w, h; if (keycode == ob_keycode(OB_KEY_RIGHT)) @@@ -733,9 -725,7 +732,9 @@@ distw = moveresize_client->size_inc.width; resist = 1; } - else if (state & modkeys_key_to_mask(OB_MODKEY_KEY_CONTROL)) { + else if (state & + obt_keyboard_modkey_to_modmask(OBT_KEYBOARD_MODKEY_CONTROL)) + { distw = 1; resist = 1; } @@@ -747,9 -737,7 +746,9 @@@ disth = moveresize_client->size_inc.height; resist = 1; } - else if (state & modkeys_key_to_mask(OB_MODKEY_KEY_CONTROL)) { + else if (state & + obt_keyboard_modkey_to_modmask(OBT_KEYBOARD_MODKEY_CONTROL)) + { disth = 1; resist = 1; } @@@ -803,12 -791,12 +802,12 @@@ pdy = dh; screen_pointer_pos(&opx, &opy); - XWarpPointer(ob_display, None, None, 0, 0, 0, 0, pdx, pdy); + XWarpPointer(obt_display, None, None, 0, 0, 0, 0, pdx, pdy); /* steal the motion events this causes */ - XSync(ob_display, FALSE); + XSync(obt_display, FALSE); { XEvent ce; - while (XCheckTypedEvent(ob_display, MotionNotify, &ce)); + while (XCheckTypedEvent(obt_display, MotionNotify, &ce)); } screen_pointer_pos(&px, &py); @@@ -851,44 -839,41 +850,44 @@@ gboolean moveresize_event(XEvent *e gint dw, dh; ObDirection dir; - if (corner == prop_atoms.net_wm_moveresize_size_topleft) { + if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPLEFT)) { dw = -(e->xmotion.x_root - start_x); dh = -(e->xmotion.y_root - start_y); dir = OB_DIRECTION_NORTHWEST; - } else if (corner == prop_atoms.net_wm_moveresize_size_top) { + } else if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOP)) { dw = 0; dh = -(e->xmotion.y_root - start_y); dir = OB_DIRECTION_NORTH; - } else if (corner == prop_atoms.net_wm_moveresize_size_topright) { + } else if (corner == + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPRIGHT)) { dw = (e->xmotion.x_root - start_x); dh = -(e->xmotion.y_root - start_y); dir = OB_DIRECTION_NORTHEAST; - } else if (corner == prop_atoms.net_wm_moveresize_size_right) { + } else if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_RIGHT)) { dw = (e->xmotion.x_root - start_x); dh = 0; dir = OB_DIRECTION_EAST; } else if (corner == - prop_atoms.net_wm_moveresize_size_bottomright) { + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT)) { dw = (e->xmotion.x_root - start_x); dh = (e->xmotion.y_root - start_y); dir = OB_DIRECTION_SOUTHEAST; - } else if (corner == prop_atoms.net_wm_moveresize_size_bottom) { + } else if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOM)) + { dw = 0; dh = (e->xmotion.y_root - start_y); dir = OB_DIRECTION_SOUTH; } else if (corner == - prop_atoms.net_wm_moveresize_size_bottomleft) { + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT)) { dw = -(e->xmotion.x_root - start_x); dh = (e->xmotion.y_root - start_y); dir = OB_DIRECTION_SOUTHWEST; - } else if (corner == prop_atoms.net_wm_moveresize_size_left) { + } else if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_LEFT)) { dw = -(e->xmotion.x_root - start_x); dh = 0; dir = OB_DIRECTION_WEST; - } else if (corner == prop_atoms.net_wm_moveresize_size_keyboard) { + } else if (corner == + OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_KEYBOARD)) { dw = (e->xmotion.x_root - start_x); dh = (e->xmotion.y_root - start_y); dir = OB_DIRECTION_SOUTHEAST; @@@ -902,15 -887,15 +901,15 @@@ cur_w += dw; cur_h += dh; - if (corner == prop_atoms.net_wm_moveresize_size_topleft || - corner == prop_atoms.net_wm_moveresize_size_left || - corner == prop_atoms.net_wm_moveresize_size_bottomleft) + if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPLEFT) || + corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_LEFT) || + corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT)) { cur_x -= dw; } - if (corner == prop_atoms.net_wm_moveresize_size_topleft || - corner == prop_atoms.net_wm_moveresize_size_top || - corner == prop_atoms.net_wm_moveresize_size_topright) + if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPLEFT) || + corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOP) || + corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_TOPRIGHT)) { cur_y -= dh; } @@@ -930,19 -915,17 +929,19 @@@ e->xkey.keycode == ob_keycode(OB_KEY_DOWN) || e->xkey.keycode == ob_keycode(OB_KEY_UP)) { - if (corner == prop_atoms.net_wm_moveresize_size_keyboard) { + if (corner == OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_KEYBOARD)) { resize_with_keys(e->xkey.keycode, e->xkey.state); used = TRUE; - } else if (corner == prop_atoms.net_wm_moveresize_move_keyboard) { + } else if (corner == + OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE_KEYBOARD)) + { move_with_keys(e->xkey.keycode, e->xkey.state); used = TRUE; } } } #ifdef SYNC - else if (e->type == extensions_sync_event_basep + XSyncAlarmNotify) + else if (e->type == obt_display_extension_sync_basep + XSyncAlarmNotify) { waiting_for_sync = FALSE; /* we got our sync... */ do_resize(); /* ...so try resize if there is more change pending */ diff --combined openbox/prompt.c index 31d805ae,53ed2d7d..52223f19 --- a/openbox/prompt.c +++ b/openbox/prompt.c @@@ -19,12 -19,12 +19,12 @@@ #include "prompt.h" #include "openbox.h" #include "screen.h" -#include "openbox.h" #include "client.h" #include "group.h" -#include "prop.h" -#include "modkeys.h" #include "event.h" +#include "obt/display.h" +#include "obt/keyboard.h" +#include "obt/prop.h" #include "gettext.h" static GList *prompt_list = NULL; @@@ -159,8 -159,9 +159,8 @@@ ObPrompt* prompt_new(const gchar *msg, self->data = data; self->default_result = default_result; self->cancel_result = cancel_result; - self->super.type = Window_Prompt; - self->super.window = XCreateWindow(ob_display, - RootWindow(ob_display, ob_screen), + self->super.type = OB_WINDOW_CLASS_PROMPT; + self->super.window = XCreateWindow(obt_display, obt_root(ob_screen), 0, 0, 1, 1, 0, CopyFromParent, InputOutput, CopyFromParent, @@@ -168,23 -169,23 +168,23 @@@ &attrib); /* make it a dialog type window */ - PROP_SET32(self->super.window, net_wm_window_type, atom, - prop_atoms.net_wm_window_type_dialog); + OBT_PROP_SET32(self->super.window, NET_WM_WINDOW_TYPE, ATOM, + OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_DIALOG)); /* set the window's title */ if (title) - PROP_SETS(self->super.window, net_wm_name, title); + OBT_PROP_SETS(self->super.window, NET_WM_NAME, utf8, title); /* listen for key presses on the window */ self->event_mask = KeyPressMask; /* set up the text message widow */ self->msg.text = g_strdup(msg); - self->msg.window = XCreateWindow(ob_display, self->super.window, + self->msg.window = XCreateWindow(obt_display, self->super.window, 0, 0, 1, 1, 0, CopyFromParent, InputOutput, CopyFromParent, 0, NULL); - XMapWindow(ob_display, self->msg.window); + XMapWindow(obt_display, self->msg.window); /* set up the buttons from the answers */ @@@ -207,15 -208,16 +207,15 @@@ } for (i = 0; i < self->n_buttons; ++i) { - self->button[i].window = XCreateWindow(ob_display, self->super.window, + self->button[i].window = XCreateWindow(obt_display, self->super.window, 0, 0, 1, 1, 0, CopyFromParent, InputOutput, CopyFromParent, 0, NULL); - XMapWindow(ob_display, self->button[i].window); - g_hash_table_insert(window_map, &self->button[i].window, - PROMPT_AS_WINDOW(self)); + XMapWindow(obt_display, self->button[i].window); + window_add(&self->button[i].window, PROMPT_AS_WINDOW(self)); /* listen for button presses on the buttons */ - XSelectInput(ob_display, self->button[i].window, + XSelectInput(obt_display, self->button[i].window, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask); } @@@ -240,12 -242,12 +240,12 @@@ void prompt_unref(ObPrompt *self prompt_list = g_list_remove(prompt_list, self); for (i = 0; i < self->n_buttons; ++i) { - g_hash_table_remove(window_map, &self->button[i].window); - XDestroyWindow(ob_display, self->button[i].window); + window_remove(self->button[i].window); + XDestroyWindow(obt_display, self->button[i].window); } - XDestroyWindow(ob_display, self->msg.window); - XDestroyWindow(ob_display, self->super.window); + XDestroyWindow(obt_display, self->msg.window); + XDestroyWindow(obt_display, self->super.window); g_free(self); } } @@@ -292,7 -294,6 +292,6 @@@ static void prompt_layout(ObPrompt *sel self->button[i].width = MAX(self->button[i].width, bw); self->button[i].height = MAX(self->button[i].height, bh); - self->button[i].width += BUTTON_HMARGIN * 2; self->button[i].height += BUTTON_VMARGIN * 2; @@@ -328,11 -329,11 +327,11 @@@ prompt_resize(self, w + l + r, h + t + b); /* move and resize the internal windows */ - XMoveResizeWindow(ob_display, self->msg.window, + XMoveResizeWindow(obt_display, self->msg.window, self->msg.x, self->msg.y, self->msg.width, self->msg.height); for (i = 0; i < self->n_buttons; ++i) - XMoveResizeWindow(ob_display, self->button[i].window, + XMoveResizeWindow(obt_display, self->button[i].window, self->button[i].x, self->button[i].y, self->button[i].width, self->button[i].height); } @@@ -349,13 -350,13 +348,13 @@@ static void prompt_resize(ObPrompt *sel hints.flags = PMinSize | PMaxSize; hints.min_width = hints.max_width = w; hints.min_height = hints.max_height = h; - XSetWMNormalHints(ob_display, self->super.window, &hints); + XSetWMNormalHints(obt_display, self->super.window, &hints); if (self->mapped) { /* send a configure request like a normal client would */ req.type = ConfigureRequest; - req.display = ob_display; - req.parent = RootWindow(ob_display, ob_screen); + req.display = obt_display; + req.parent = obt_root(ob_screen); req.window = self->super.window; req.width = w; req.height = h; @@@ -364,7 -365,7 +363,7 @@@ (XEvent*)&req); } else - XResizeWindow(ob_display, self->super.window, w, h); + XResizeWindow(obt_display, self->super.window, w, h); } static void setup_button_focus_tex(ObPromptElement *e, RrAppearance *a, @@@ -458,11 -459,11 +457,11 @@@ void prompt_show(ObPrompt *self, ObClie if (self->mapped) { /* activate the prompt */ - PROP_MSG(self->super.window, net_active_window, - 1, /* from an application.. */ - event_curtime, - 0, - 0); + OBT_PROP_MSG(ob_screen, self->super.window, NET_ACTIVE_WINDOW, + 1, /* from an application.. */ + event_curtime, + 0, + 0, 0); return; } @@@ -484,7 -485,7 +483,7 @@@ /* make it transient for the window's group */ h.flags = WindowGroupHint; h.window_group = parent->group->leader; - p = RootWindow(ob_display, ob_screen); + p = obt_root(ob_screen); } else { /* make it transient for the window directly */ @@@ -492,16 -493,15 +491,16 @@@ p = parent->window; } - XSetWMHints(ob_display, self->super.window, &h); - PROP_SET32(self->super.window, wm_transient_for, window, p); + XSetWMHints(obt_display, self->super.window, &h); + OBT_PROP_SET32(self->super.window, WM_TRANSIENT_FOR, WINDOW, p); - states[0] = prop_atoms.net_wm_state_modal; + states[0] = OBT_PROP_ATOM(NET_WM_STATE_MODAL); nstates = (modal ? 1 : 0); - PROP_SETA32(self->super.window, net_wm_state, atom, states, nstates); + OBT_PROP_SETA32(self->super.window, NET_WM_STATE, ATOM, + states, nstates); } else - PROP_ERASE(self->super.window, wm_transient_for); + OBT_PROP_ERASE(self->super.window, WM_TRANSIENT_FOR); /* set up the dialog and render it */ prompt_layout(self); @@@ -514,7 -514,7 +513,7 @@@ void prompt_hide(ObPrompt *self) { - XUnmapWindow(ob_display, self->super.window); + XUnmapWindow(obt_display, self->super.window); self->mapped = FALSE; } @@@ -525,7 -525,7 +524,7 @@@ gboolean prompt_key_event(ObPrompt *sel if (e->type != KeyPress) return FALSE; - shift_mask = modkeys_key_to_mask(OB_MODKEY_KEY_SHIFT); + shift_mask = obt_keyboard_modkey_to_modmask(OBT_KEYBOARD_MODKEY_SHIFT); shift = !!(e->xkey.state & shift_mask); /* only accept shift */ diff --combined openbox/session.c index ea909897,77dc5de0..e4ecb6c7 --- a/openbox/session.c +++ b/openbox/session.c @@@ -39,10 -39,10 +39,10 @@@ void session_request_logout(gboolean si #include "debug.h" #include "openbox.h" #include "client.h" -#include "prop.h" #include "focus.h" #include "gettext.h" -#include "parser/parse.h" +#include "obt/parse.h" +#include "obt/paths.h" #include #include @@@ -92,26 -92,22 +92,26 @@@ static void session_state_free(ObSessio void session_startup(gint argc, gchar **argv) { gchar *dir; + ObtPaths *p; if (!ob_sm_use) return; sm_argc = argc; sm_argv = argv; - dir = g_build_filename(parse_xdg_data_home_path(), + p = obt_paths_new(); + dir = g_build_filename(obt_paths_cache_home(p), "openbox", "sessions", NULL); - if (!parse_mkdir_path(dir, 0700)) { + obt_paths_unref(p), p = NULL; + + if (!obt_paths_mkdir_path(dir, 0700)) { g_message(_("Unable to make directory \"%s\": %s"), dir, g_strerror(errno)); } if (ob_sm_save_file != NULL) { if (ob_sm_restore) { - ob_debug_type(OB_DEBUG_SM, "Loading from session file %s\n", + ob_debug_type(OB_DEBUG_SM, "Loading from session file %s", ob_sm_save_file); session_load_file(ob_sm_save_file); } @@@ -160,7 -156,7 +160,7 @@@ void session_shutdown(gboolean permanen } /*! Connect to the session manager and set up our callback functions */ -static gboolean session_connect() +static gboolean session_connect(void) { SmcCallbacks cb; gchar *oldid; @@@ -178,7 -174,7 +178,7 @@@ /* connect to the server */ oldid = ob_sm_id; - ob_debug_type(OB_DEBUG_SM, "Connecting to SM with id: %s\n", + ob_debug_type(OB_DEBUG_SM, "Connecting to SM with id: %s", oldid ? oldid : "(null)"); sm_conn = SmcOpenConnection(NULL, NULL, 1, 0, SmcSaveYourselfProcMask | @@@ -188,13 -184,13 +188,13 @@@ &cb, oldid, &ob_sm_id, SM_ERR_LEN-1, sm_err); g_free(oldid); - ob_debug_type(OB_DEBUG_SM, "Connected to SM with id: %s\n", ob_sm_id); + ob_debug_type(OB_DEBUG_SM, "Connected to SM with id: %s", ob_sm_id); if (sm_conn == NULL) - ob_debug("Failed to connect to session manager: %s\n", sm_err); + ob_debug("Failed to connect to session manager: %s", sm_err); return sm_conn != NULL; } -static void session_setup_program() +static void session_setup_program(void) { SmPropValue vals = { .value = sm_argv[0], @@@ -207,13 -203,13 +207,13 @@@ .vals = &vals }; SmProp *list = ∝ - ob_debug_type(OB_DEBUG_SM, "Setting program: %s\n", sm_argv[0]); + ob_debug_type(OB_DEBUG_SM, "Setting program: %s", sm_argv[0]); SmcSetProperties(sm_conn, 1, &list); g_free(prop.name); g_free(prop.type); } -static void session_setup_user() +static void session_setup_user(void) { char *user = g_strdup(g_get_user_name()); @@@ -228,7 -224,7 +228,7 @@@ .vals = &vals }; SmProp *list = ∝ - ob_debug_type(OB_DEBUG_SM, "Setting user: %s\n", user); + ob_debug_type(OB_DEBUG_SM, "Setting user: %s", user); SmcSetProperties(sm_conn, 1, &list); g_free(prop.name); g_free(prop.type); @@@ -250,13 -246,13 +250,13 @@@ static void session_setup_restart_style .vals = &vals }; SmProp *list = ∝ - ob_debug_type(OB_DEBUG_SM, "Setting restart: %d\n", restart); + ob_debug_type(OB_DEBUG_SM, "Setting restart: %d", restart); SmcSetProperties(sm_conn, 1, &list); g_free(prop.name); g_free(prop.type); } -static void session_setup_pid() +static void session_setup_pid(void) { gchar *pid = g_strdup_printf("%ld", (glong) getpid()); @@@ -271,7 -267,7 +271,7 @@@ .vals = &vals }; SmProp *list = ∝ - ob_debug_type(OB_DEBUG_SM, "Setting pid: %s\n", pid); + ob_debug_type(OB_DEBUG_SM, "Setting pid: %s", pid); SmcSetProperties(sm_conn, 1, &list); g_free(prop.name); g_free(prop.type); @@@ -279,7 -275,7 +279,7 @@@ } /*! This is a gnome-session-manager extension */ -static void session_setup_priority() +static void session_setup_priority(void) { gchar priority = 20; /* 20 is a lower prioity to run before other apps */ @@@ -294,13 -290,13 +294,13 @@@ .vals = &vals }; SmProp *list = ∝ - ob_debug_type(OB_DEBUG_SM, "Setting priority: %d\n", priority); + ob_debug_type(OB_DEBUG_SM, "Setting priority: %d", priority); SmcSetProperties(sm_conn, 1, &list); g_free(prop.name); g_free(prop.type); } -static void session_setup_clone_command() +static void session_setup_clone_command(void) { gint i; @@@ -313,11 -309,11 +313,11 @@@ }; SmProp *list = ∝ - ob_debug_type(OB_DEBUG_SM, "Setting clone command: (%d)\n", sm_argc); + ob_debug_type(OB_DEBUG_SM, "Setting clone command: (%d)", sm_argc); for (i = 0; i < sm_argc; ++i) { vals[i].value = sm_argv[i]; vals[i].length = strlen(sm_argv[i]) + 1; - ob_debug_type(OB_DEBUG_SM, " %s\n", vals[i].value); + ob_debug_type(OB_DEBUG_SM, " %s", vals[i].value); } SmcSetProperties(sm_conn, 1, &list); @@@ -326,7 -322,7 +326,7 @@@ g_free(vals); } -static void session_setup_restart_command() +static void session_setup_restart_command(void) { gint i; @@@ -339,26 -335,26 +339,26 @@@ }; SmProp *list = ∝ - ob_debug_type(OB_DEBUG_SM, "Setting restart command: (%d)\n", sm_argc+4); + ob_debug_type(OB_DEBUG_SM, "Setting restart command: (%d)", sm_argc+4); for (i = 0; i < sm_argc; ++i) { vals[i].value = sm_argv[i]; vals[i].length = strlen(sm_argv[i]) + 1; - ob_debug_type(OB_DEBUG_SM, " %s\n", vals[i].value); + ob_debug_type(OB_DEBUG_SM, " %s", vals[i].value); } vals[i].value = g_strdup("--sm-client-id"); vals[i].length = strlen("--sm-client-id") + 1; vals[i+1].value = ob_sm_id; vals[i+1].length = strlen(ob_sm_id) + 1; - ob_debug_type(OB_DEBUG_SM, " %s\n", vals[i].value); - ob_debug_type(OB_DEBUG_SM, " %s\n", vals[i+1].value); + ob_debug_type(OB_DEBUG_SM, " %s", vals[i].value); + ob_debug_type(OB_DEBUG_SM, " %s", vals[i+1].value); vals[i+2].value = g_strdup("--sm-save-file"); vals[i+2].length = strlen("--sm-save-file") + 1; vals[i+3].value = ob_sm_save_file; vals[i+3].length = strlen(ob_sm_save_file) + 1; - ob_debug_type(OB_DEBUG_SM, " %s\n", vals[i+2].value); - ob_debug_type(OB_DEBUG_SM, " %s\n", vals[i+3].value); + ob_debug_type(OB_DEBUG_SM, " %s", vals[i+2].value); + ob_debug_type(OB_DEBUG_SM, " %s", vals[i+3].value); SmcSetProperties(sm_conn, 1, &list); g_free(prop.name); @@@ -368,7 -364,7 +368,7 @@@ g_free(vals); } -static ObSMSaveData *sm_save_get_data() +static ObSMSaveData *sm_save_get_data(void) { ObSMSaveData *savedata = g_new0(ObSMSaveData, 1); /* save the active desktop and client. @@@ -386,9 -382,9 +386,9 @@@ static void sm_save_yourself_2(SmcConn ObSMSaveData *savedata = data; /* save the current state */ - ob_debug_type(OB_DEBUG_SM, "Session save phase 2 requested\n"); + ob_debug_type(OB_DEBUG_SM, "Session save phase 2 requested"); ob_debug_type(OB_DEBUG_SM, - " Saving session to file '%s'\n", ob_sm_save_file); + " Saving session to file '%s'", ob_sm_save_file); if (savedata == NULL) savedata = sm_save_get_data(); success = session_save_to_file(savedata); @@@ -397,11 -393,10 +397,10 @@@ /* tell the session manager how to restore this state */ if (success) session_setup_restart_command(); - ob_debug_type(OB_DEBUG_SM, "Saving is done (success = %d)\n", success); + ob_debug_type(OB_DEBUG_SM, "Saving is done (success = %d)", success); SmcSaveYourselfDone(conn, success); } - static void sm_save_yourself(SmcConn conn, SmPointer data, gint save_type, Bool shutdown, gint interact_style, Bool fast) { @@@ -426,7 -421,7 +425,7 @@@ } vendor = SmcVendor(sm_conn); - ob_debug_type(OB_DEBUG_SM, "Session manager's vendor: %s\n", vendor); + ob_debug_type(OB_DEBUG_SM, "Session manager's vendor: %s", vendor); if (!strcmp(vendor, "KDE")) { /* ksmserver guarantees that phase 1 will complete before allowing any @@@ -437,7 -432,7 +436,7 @@@ free(vendor); if (!SmcRequestSaveYourselfPhase2(conn, sm_save_yourself_2, savedata)) { - ob_debug_type(OB_DEBUG_SM, "Requst for phase 2 failed\n"); + ob_debug_type(OB_DEBUG_SM, "Requst for phase 2 failed"); g_free(savedata); SmcSaveYourselfDone(conn, FALSE); } @@@ -445,18 -440,18 +444,18 @@@ static void sm_die(SmcConn conn, SmPointer data) { - ob_debug_type(OB_DEBUG_SM, "Die requested\n"); + ob_debug_type(OB_DEBUG_SM, "Die requested"); ob_exit(0); } static void sm_save_complete(SmcConn conn, SmPointer data) { - ob_debug_type(OB_DEBUG_SM, "Save complete\n"); + ob_debug_type(OB_DEBUG_SM, "Save complete"); } static void sm_shutdown_cancelled(SmcConn conn, SmPointer data) { - ob_debug_type(OB_DEBUG_SM, "Shutdown cancelled\n"); + ob_debug_type(OB_DEBUG_SM, "Shutdown cancelled"); } static gboolean session_save_to_file(const ObSMSaveData *savedata) @@@ -514,18 -509,18 +513,18 @@@ if (!c->sm_client_id) { ob_debug_type(OB_DEBUG_SM, "Client %s does not have a " - "session id set\n", + "session id set", c->title); if (!c->wm_command) { ob_debug_type(OB_DEBUG_SM, "Client %s does not have an " "oldskool wm_command set either. We won't " - "be saving its data\n", + "be saving its data", c->title); continue; } } - ob_debug_type(OB_DEBUG_SM, "Saving state for client %s\n", + ob_debug_type(OB_DEBUG_SM, "Saving state for client %s", c->title); prex = c->area.x; @@@ -624,20 -619,20 +623,20 @@@ static void session_state_free(ObSessio static gboolean session_state_cmp(ObSessionState *s, ObClient *c) { - ob_debug_type(OB_DEBUG_SM, "Comparing client against saved state: \n"); - ob_debug_type(OB_DEBUG_SM, " client id: %s \n", c->sm_client_id); - ob_debug_type(OB_DEBUG_SM, " client name: %s \n", c->name); - ob_debug_type(OB_DEBUG_SM, " client class: %s \n", c->class); - ob_debug_type(OB_DEBUG_SM, " client role: %s \n", c->role); - ob_debug_type(OB_DEBUG_SM, " client type: %d \n", c->type); - ob_debug_type(OB_DEBUG_SM, " client command: %s \n", + ob_debug_type(OB_DEBUG_SM, "Comparing client against saved state: "); + ob_debug_type(OB_DEBUG_SM, " client id: %s ", c->sm_client_id); + ob_debug_type(OB_DEBUG_SM, " client name: %s ", c->name); + ob_debug_type(OB_DEBUG_SM, " client class: %s ", c->class); + ob_debug_type(OB_DEBUG_SM, " client role: %s ", c->role); + ob_debug_type(OB_DEBUG_SM, " client type: %d ", c->type); + ob_debug_type(OB_DEBUG_SM, " client command: %s ", c->wm_command ? c->wm_command : "(null)"); - ob_debug_type(OB_DEBUG_SM, " state id: %s \n", s->id); - ob_debug_type(OB_DEBUG_SM, " state name: %s \n", s->name); - ob_debug_type(OB_DEBUG_SM, " state class: %s \n", s->class); - ob_debug_type(OB_DEBUG_SM, " state role: %s \n", s->role); - ob_debug_type(OB_DEBUG_SM, " state type: %d \n", s->type); - ob_debug_type(OB_DEBUG_SM, " state command: %s \n", + ob_debug_type(OB_DEBUG_SM, " state id: %s ", s->id); + ob_debug_type(OB_DEBUG_SM, " state name: %s ", s->name); + ob_debug_type(OB_DEBUG_SM, " state class: %s ", s->class); + ob_debug_type(OB_DEBUG_SM, " state role: %s ", s->role); + ob_debug_type(OB_DEBUG_SM, " state type: %d ", s->type); + ob_debug_type(OB_DEBUG_SM, " state command: %s ", s->command ? s->command : "(null)"); if ((c->sm_client_id && s->id && !strcmp(c->sm_client_id, s->id)) || @@@ -672,117 -667,108 +671,117 @@@ GList* session_state_find(ObClient *c static void session_load_file(const gchar *path) { - xmlDocPtr doc; + ObtParseInst *i; xmlNodePtr node, n, m; GList *it, *inext; - if (!parse_load(path, "openbox_session", &doc, &node)) + i = obt_parse_instance_new(); + + if (!obt_parse_load_file(i, path, "openbox_session")) { + ob_debug_type(OB_DEBUG_SM, "ERROR: session file is missing root node"); + obt_parse_instance_unref(i); return; + } + node = obt_parse_root(i); - if ((n = parse_find_node("desktop", node->children))) - session_desktop = parse_int(doc, n); + if ((n = obt_parse_find_node(node->children, "desktop"))) + session_desktop = obt_parse_node_int(n); - if ((n = parse_find_node("numdesktops", node->children))) - session_num_desktops = parse_int(doc, n); + if ((n = obt_parse_find_node(node->children, "numdesktops"))) + session_num_desktops = obt_parse_node_int(n); - if ((n = parse_find_node("desktoplayout", node->children))) { + if ((n = obt_parse_find_node(node->children, "desktoplayout"))) { /* make sure they are all there for it to be valid */ - if ((m = parse_find_node("orientation", n->children))) - session_desktop_layout.orientation = parse_int(doc, m); - if (m && (m = parse_find_node("startcorner", n->children))) - session_desktop_layout.start_corner = parse_int(doc, m); - if (m && (m = parse_find_node("columns", n->children))) - session_desktop_layout.columns = parse_int(doc, m); - if (m && (m = parse_find_node("rows", n->children))) - session_desktop_layout.rows = parse_int(doc, m); + if ((m = obt_parse_find_node(n->children, "orientation"))) + session_desktop_layout.orientation = obt_parse_node_int(m); + if (m && (m = obt_parse_find_node(n->children, "startcorner"))) + session_desktop_layout.start_corner = obt_parse_node_int(m); + if (m && (m = obt_parse_find_node(n->children, "columns"))) + session_desktop_layout.columns = obt_parse_node_int(m); + if (m && (m = obt_parse_find_node(n->children, "rows"))) + session_desktop_layout.rows = obt_parse_node_int(m); session_desktop_layout_present = m != NULL; } - if ((n = parse_find_node("desktopnames", node->children))) { - for (m = parse_find_node("name", n->children); m; - m = parse_find_node("name", m->next)) + if ((n = obt_parse_find_node(node->children, "desktopnames"))) { + for (m = obt_parse_find_node(n->children, "name"); m; + m = obt_parse_find_node(m->next, "name")) { session_desktop_names = g_slist_append(session_desktop_names, - parse_string(doc, m)); + obt_parse_node_string(m)); } } - for (node = parse_find_node("window", node->children); node != NULL; - node = parse_find_node("window", node->next)) + ob_debug_type(OB_DEBUG_SM, "loading windows"); + for (node = obt_parse_find_node(node->children, "window"); node != NULL; + node = obt_parse_find_node(node->next, "window")) { ObSessionState *state; state = g_new0(ObSessionState, 1); - if (!parse_attr_string("id", node, &state->id)) - if (!parse_attr_string("command", node, &state->command)) + if (!obt_parse_attr_string(node, "id", &state->id)) + if (!obt_parse_attr_string(node, "command", &state->command)) goto session_load_bail; - if (!(n = parse_find_node("name", node->children))) + if (!(n = obt_parse_find_node(node->children, "name"))) goto session_load_bail; - state->name = parse_string(doc, n); - if (!(n = parse_find_node("class", node->children))) + state->name = obt_parse_node_string(n); + if (!(n = obt_parse_find_node(node->children, "class"))) goto session_load_bail; - state->class = parse_string(doc, n); - if (!(n = parse_find_node("role", node->children))) + state->class = obt_parse_node_string(n); + if (!(n = obt_parse_find_node(node->children, "role"))) goto session_load_bail; - state->role = parse_string(doc, n); - if (!(n = parse_find_node("windowtype", node->children))) + state->role = obt_parse_node_string(n); + if (!(n = obt_parse_find_node(node->children, "windowtype"))) goto session_load_bail; - state->type = parse_int(doc, n); - if (!(n = parse_find_node("desktop", node->children))) + state->type = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "desktop"))) goto session_load_bail; - state->desktop = parse_int(doc, n); - if (!(n = parse_find_node("x", node->children))) + state->desktop = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "x"))) goto session_load_bail; - state->x = parse_int(doc, n); - if (!(n = parse_find_node("y", node->children))) + state->x = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "y"))) goto session_load_bail; - state->y = parse_int(doc, n); - if (!(n = parse_find_node("width", node->children))) + state->y = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "width"))) goto session_load_bail; - state->w = parse_int(doc, n); - if (!(n = parse_find_node("height", node->children))) + state->w = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "height"))) goto session_load_bail; - state->h = parse_int(doc, n); + state->h = obt_parse_node_int(n); state->shaded = - parse_find_node("shaded", node->children) != NULL; + obt_parse_find_node(node->children, "shaded") != NULL; state->iconic = - parse_find_node("iconic", node->children) != NULL; + obt_parse_find_node(node->children, "iconic") != NULL; state->skip_pager = - parse_find_node("skip_pager", node->children) != NULL; + obt_parse_find_node(node->children, "skip_pager") != NULL; state->skip_taskbar = - parse_find_node("skip_taskbar", node->children) != NULL; + obt_parse_find_node(node->children, "skip_taskbar") != NULL; state->fullscreen = - parse_find_node("fullscreen", node->children) != NULL; + obt_parse_find_node(node->children, "fullscreen") != NULL; state->above = - parse_find_node("above", node->children) != NULL; + obt_parse_find_node(node->children, "above") != NULL; state->below = - parse_find_node("below", node->children) != NULL; + obt_parse_find_node(node->children, "below") != NULL; state->max_horz = - parse_find_node("max_horz", node->children) != NULL; + obt_parse_find_node(node->children, "max_horz") != NULL; state->max_vert = - parse_find_node("max_vert", node->children) != NULL; + obt_parse_find_node(node->children, "max_vert") != NULL; state->undecorated = - parse_find_node("undecorated", node->children) != NULL; + obt_parse_find_node(node->children, "undecorated") != NULL; state->focused = - parse_find_node("focused", node->children) != NULL; + obt_parse_find_node(node->children, "focused") != NULL; /* save this. they are in the file in stacking order, so preserve that order here */ session_saved_state = g_list_append(session_saved_state, state); + ob_debug_type(OB_DEBUG_SM, "loaded %s", state->name); continue; session_load_bail: + ob_debug_type(OB_DEBUG_SM, "loading FAILED"); session_state_free(state); } @@@ -817,7 -803,6 +816,7 @@@ !strcmp(s1->class, s2->class) && !strcmp(s1->role, s2->role)) { + ob_debug_type(OB_DEBUG_SM, "removing duplicate %s", s2->name); session_state_free(s2); session_saved_state = g_list_delete_link(session_saved_state, jt); @@@ -826,13 -811,12 +825,13 @@@ } if (founddup) { + ob_debug_type(OB_DEBUG_SM, "removing duplicate %s", s1->name); session_state_free(s1); session_saved_state = g_list_delete_link(session_saved_state, it); } } - xmlFreeDoc(doc); + obt_parse_instance_unref(i); } void session_request_logout(gboolean silent) diff --combined render/theme.c index ece4037c,d040c171..47c8a9c9 --- a/render/theme.c +++ b/render/theme.c @@@ -23,7 -23,7 +23,7 @@@ #include "mask.h" #include "theme.h" #include "icon.h" -#include "parser/parse.h" +#include "obt/paths.h" #include #include @@@ -560,16 -560,6 +560,16 @@@ RrTheme* RrThemeNew(const RrInstance *i theme->menu_bullet_mask = RrPixmapMaskNew(inst, 4, 7, (gchar*)data); } + /* up and down arrows */ + { + guchar data[] = { 0xfe, 0x00, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00 }; + theme->down_arrow_mask = RrPixmapMaskNew(inst, 9, 4, (gchar*)data); + } + { + guchar data[] = { 0x10, 0x00, 0x38, 0x00, 0x7c, 0x00, 0xfe, 0x00 }; + theme->up_arrow_mask = RrPixmapMaskNew(inst, 9, 4, (gchar*)data); + } + /* setup the default window icon */ theme->def_win_icon = read_c_image(OB_DEFAULT_ICON_WIDTH, OB_DEFAULT_ICON_HEIGHT, @@@ -577,7 -567,6 +577,6 @@@ theme->def_win_icon_w = OB_DEFAULT_ICON_WIDTH; theme->def_win_icon_h = OB_DEFAULT_ICON_HEIGHT; - /* read the decoration textures */ if (!read_appearance(db, inst, "window.active.title.bg", theme->a_focused_title, @@@ -1482,8 -1471,6 +1481,8 @@@ void RrThemeFree(RrTheme *theme RrPixmapMaskFree(theme->close_hover_mask); RrPixmapMaskFree(theme->close_pressed_mask); RrPixmapMaskFree(theme->menu_bullet_mask); + RrPixmapMaskFree(theme->down_arrow_mask); + RrPixmapMaskFree(theme->up_arrow_mask); RrFontClose(theme->win_font_focused); RrFontClose(theme->win_font_unfocused); @@@ -1594,10 -1581,6 +1593,10 @@@ static XrmDatabase loaddb(const gchar * *path = g_path_get_dirname(s); g_free(s); } else { + ObtPaths *p; + + p = obt_paths_new(); + /* XXX backwards compatibility, remove me sometime later */ s = g_build_filename(g_get_home_dir(), ".themes", name, "openbox-3", "themerc", NULL); @@@ -1605,7 -1588,8 +1604,7 @@@ *path = g_path_get_dirname(s); g_free(s); - for (it = parse_xdg_data_dir_paths(); !db && it; - it = g_slist_next(it)) + for (it = obt_paths_data_dirs(p); !db && it; it = g_slist_next(it)) { s = g_build_filename(it->data, "themes", name, "openbox-3", "themerc", NULL); @@@ -1613,8 -1597,6 +1612,8 @@@ *path = g_path_get_dirname(s); g_free(s); } + + obt_paths_unref(p); } if (db == NULL) { @@@ -1780,7 -1762,6 +1779,6 @@@ static void parse_appearance(gchar *tex *interlaced = FALSE; } - static gboolean read_appearance(XrmDatabase db, const RrInstance *inst, const gchar *rname, RrAppearance *value, gboolean allow_trans)