all repos — openbox @ 29637976e6aecf45bae84ba9ce3ecb26635012f7

openbox fork - make it a bit more like ryudo

make the window.h interface more consistent with the rest of openbox, hide the window_map behind some functions, and make obdockapps not obwindows anymore
Dana Jansens danakj@orodu.net
commit

29637976e6aecf45bae84ba9ce3ecb26635012f7

parent

ea481338b5f16fd81a7b33e036ead39b918a51af

M openbox/client.copenbox/client.c

@@ -274,7 +274,7 @@

/* 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; /* non-zero defaults */

@@ -597,7 +597,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))

@@ -705,7 +705,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 */

@@ -1285,13 +1285,13 @@ gboolean trangroup = FALSE;

if (XGetTransientForHint(obt_display, self->window, &t)) { if (t != self->window) { /* cant 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)) { - /* this can happen when a dialog is a child of - a dockapp, for example */ - target = NULL; + g_assert(tw != CLIENT_AS_WINDOW(self)); + if (target && WINDOW_IS_CLIENT(tw)) { + /* watch out for windows with a parent that is something + different, like a dockapp for example */ + target = WINDOW_AS_CLIENT(tw); } }
M openbox/dock.copenbox/dock.c

@@ -78,7 +78,7 @@ STRUT_PARTIAL_SET(dock_strut, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0); dock = g_new0(ObDock, 1); - dock->obwin.type = Window_Dock; + dock->obwin.type = OB_WINDOW_CLASS_DOCK; dock->hidden = TRUE;

@@ -102,7 +102,7 @@ /* Setting the window type so xcompmgr can tell what it is */

OBT_PROP_SET32(dock->frame, NET_WM_WINDOW_TYPE, ATOM, OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_DOCK)); - g_hash_table_insert(window_map, &dock->frame, dock); + window_add(&dock->frame, DOCK_AS_WINDOW(dock)); stacking_add(DOCK_AS_WINDOW(dock)); }

@@ -120,7 +120,7 @@ }

XDestroyWindow(obt_display, dock->frame); RrAppearanceFree(dock->a_frame); - g_hash_table_remove(window_map, &dock->frame); + window_remove(dock->frame); stacking_remove(dock); }

@@ -131,7 +131,6 @@ XWindowAttributes attrib;

gchar **data; app = g_new0(ObDockApp, 1); - app->obwin.type = Window_DockApp; app->win = win; app->icon_win = (wmhints->flags & IconWindowHint) ? wmhints->icon_window : win;

@@ -184,8 +183,6 @@ XSelectInput(obt_display, app->icon_win, DOCKAPP_EVENT_MASK);

dock_app_grab_button(app, TRUE); - g_hash_table_insert(window_map, &app->icon_win, app); - ob_debug("Managed Dock App: 0x%lx (%s)\n", app->icon_win, app->class); }

@@ -202,8 +199,6 @@ XSelectInput(obt_display, app->icon_win, NoEventMask);

/* remove the window from our save set */ XChangeSaveSet(obt_display, app->icon_win, SetModeDelete); XSync(obt_display, False); - - g_hash_table_remove(window_map, &app->icon_win); if (reparent) XReparentWindow(obt_display, app->icon_win,

@@ -654,3 +649,17 @@ {

RECT_SET(*a, dock->area.x, dock->area.y, dock->area.width, dock->area.height); } + +ObDockApp* dock_find_dockapp(Window xwin) +{ + g_assert(xwin != None); + GList *it; + /* there are never that many dock apps, so we can use a list here instead + of a hash table */ + for (it = dock->dock_apps; it; it = g_list_next(it)) { + ObDockApp *app = it->data; + if (app->icon_win == xwin) + return app; + } + return NULL; +}
M openbox/dock.hopenbox/dock.h

@@ -47,8 +47,6 @@ GList *dock_apps;

}; struct _ObDockApp { - ObWindow obwin; - gint ignore_unmaps; Window icon_win;

@@ -80,5 +78,7 @@ void dock_app_drag(ObDockApp *app, XMotionEvent *e);

void dock_app_configure(ObDockApp *app, gint w, gint h); void dock_get_area(Rect *a); + +ObDockApp* dock_find_dockapp(Window xwin); #endif
M openbox/event.copenbox/event.c

@@ -335,7 +335,7 @@ It's possible to get a FocusIn event for a client that was managed

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; }

@@ -463,26 +463,24 @@ ee = *ec;

e = ⅇ window = event_get_window(e); - if ((obwin = g_hash_table_lookup(window_map, &window))) { + 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); break; - case Window_Menu: - /* not to be used for events */ - g_assert_not_reached(); + case OB_WINDOW_CLASS_MENUFRAME: + /* XXX use this to handle events more uniformly */ break; - case Window_Internal: + case OB_WINDOW_CLASS_INTERNALWINDOW: /* we don't do anything with events directly on these windows */ break; } } + else + dockapp = dock_find_dockapp(window); event_set_curtime(e); event_curserial = e->xany.serial;

@@ -713,8 +711,8 @@ internal window */

else { ObWindow *w; - if ((w = g_hash_table_lookup(window_map, &e->xbutton.subwindow)) && - WINDOW_IS_INTERNAL(w)) + if ((w = window_find(e->xbutton.subwindow)) && + WINDOW_IS_INTERNALWINDOW(w)) { event_handle_user_input(client, e); }

@@ -1113,8 +1111,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) {

@@ -1447,8 +1444,7 @@ 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) {
M openbox/focus_cycle_indicator.copenbox/focus_cycle_indicator.c

@@ -32,10 +32,10 @@ #define FOCUS_INDICATOR_WIDTH 6

static struct { - InternalWindow top; - InternalWindow left; - InternalWindow right; - InternalWindow bottom; + ObInternalWindow top; + ObInternalWindow left; + ObInternalWindow right; + ObInternalWindow bottom; } focus_indicator; static RrAppearance *a_focus_indicator;

@@ -59,38 +59,38 @@ visible = FALSE;

if (reconfig) return; - focus_indicator.top.obwin.type = Window_Internal; - focus_indicator.left.obwin.type = Window_Internal; - focus_indicator.right.obwin.type = Window_Internal; - focus_indicator.bottom.obwin.type = Window_Internal; + focus_indicator.top.obwin.type = OB_WINDOW_CLASS_INTERNALWINDOW; + focus_indicator.left.obwin.type = OB_WINDOW_CLASS_INTERNALWINDOW; + focus_indicator.right.obwin.type = OB_WINDOW_CLASS_INTERNALWINDOW; + focus_indicator.bottom.obwin.type = OB_WINDOW_CLASS_INTERNALWINDOW; attr.override_redirect = True; attr.background_pixel = BlackPixel(obt_display, ob_screen); - focus_indicator.top.win = + focus_indicator.top.window = create_window(RootWindow(obt_display, ob_screen), CWOverrideRedirect | CWBackPixel, &attr); - focus_indicator.left.win = + focus_indicator.left.window = create_window(RootWindow(obt_display, ob_screen), CWOverrideRedirect | CWBackPixel, &attr); - focus_indicator.right.win = + focus_indicator.right.window = create_window(RootWindow(obt_display, ob_screen), CWOverrideRedirect | CWBackPixel, &attr); - focus_indicator.bottom.win = + focus_indicator.bottom.window = create_window(RootWindow(obt_display, ob_screen), CWOverrideRedirect | CWBackPixel, &attr); - stacking_add(INTERNAL_AS_WINDOW(&focus_indicator.top)); - stacking_add(INTERNAL_AS_WINDOW(&focus_indicator.left)); - stacking_add(INTERNAL_AS_WINDOW(&focus_indicator.right)); - stacking_add(INTERNAL_AS_WINDOW(&focus_indicator.bottom)); - g_hash_table_insert(window_map, &focus_indicator.top.win, - &focus_indicator.top); - g_hash_table_insert(window_map, &focus_indicator.left.win, - &focus_indicator.left); - g_hash_table_insert(window_map, &focus_indicator.right.win, - &focus_indicator.right); - g_hash_table_insert(window_map, &focus_indicator.bottom.win, - &focus_indicator.bottom); + stacking_add(INTERNALWINDOW_AS_WINDOW(&focus_indicator.top)); + stacking_add(INTERNALWINDOW_AS_WINDOW(&focus_indicator.left)); + stacking_add(INTERNALWINDOW_AS_WINDOW(&focus_indicator.right)); + stacking_add(INTERNALWINDOW_AS_WINDOW(&focus_indicator.bottom)); + window_add(&focus_indicator.top.window, + INTERNALWINDOW_AS_WINDOW(&focus_indicator.top)); + window_add(&focus_indicator.left.window, + INTERNALWINDOW_AS_WINDOW(&focus_indicator.left)); + window_add(&focus_indicator.right.window, + INTERNALWINDOW_AS_WINDOW(&focus_indicator.right)); + window_add(&focus_indicator.bottom.window, + INTERNALWINDOW_AS_WINDOW(&focus_indicator.bottom)); color_white = RrColorNew(ob_rr_inst, 0xff, 0xff, 0xff);

@@ -117,20 +117,20 @@ RrColorFree(color_white);

RrAppearanceFree(a_focus_indicator); - g_hash_table_remove(window_map, &focus_indicator.top.win); - g_hash_table_remove(window_map, &focus_indicator.left.win); - g_hash_table_remove(window_map, &focus_indicator.right.win); - g_hash_table_remove(window_map, &focus_indicator.bottom.win); + window_remove(focus_indicator.top.window); + window_remove(focus_indicator.left.window); + window_remove(focus_indicator.right.window); + window_remove(focus_indicator.bottom.window); - stacking_remove(INTERNAL_AS_WINDOW(&focus_indicator.top)); - stacking_remove(INTERNAL_AS_WINDOW(&focus_indicator.left)); - stacking_remove(INTERNAL_AS_WINDOW(&focus_indicator.right)); - stacking_remove(INTERNAL_AS_WINDOW(&focus_indicator.bottom)); + stacking_remove(INTERNALWINDOW_AS_WINDOW(&focus_indicator.top)); + stacking_remove(INTERNALWINDOW_AS_WINDOW(&focus_indicator.left)); + stacking_remove(INTERNALWINDOW_AS_WINDOW(&focus_indicator.right)); + stacking_remove(INTERNALWINDOW_AS_WINDOW(&focus_indicator.bottom)); - XDestroyWindow(obt_display, focus_indicator.top.win); - XDestroyWindow(obt_display, focus_indicator.left.win); - XDestroyWindow(obt_display, focus_indicator.right.win); - XDestroyWindow(obt_display, focus_indicator.bottom.win); + XDestroyWindow(obt_display, focus_indicator.top.window); + XDestroyWindow(obt_display, focus_indicator.left.window); + XDestroyWindow(obt_display, focus_indicator.right.window); + XDestroyWindow(obt_display, focus_indicator.bottom.window); } void focus_cycle_draw_indicator(ObClient *c)

@@ -141,10 +141,10 @@

/* kill enter events cause by this unmapping */ ignore_start = event_start_ignore_all_enters(); - XUnmapWindow(obt_display, focus_indicator.top.win); - XUnmapWindow(obt_display, focus_indicator.left.win); - XUnmapWindow(obt_display, focus_indicator.right.win); - XUnmapWindow(obt_display, focus_indicator.bottom.win); + XUnmapWindow(obt_display, focus_indicator.top.window); + XUnmapWindow(obt_display, focus_indicator.left.window); + XUnmapWindow(obt_display, focus_indicator.right.window); + XUnmapWindow(obt_display, focus_indicator.bottom.window); event_end_ignore_all_enters(ignore_start);

@@ -166,7 +166,7 @@ y = c->frame->area.y;

w = c->frame->area.width; h = wt; - XMoveResizeWindow(obt_display, focus_indicator.top.win, + XMoveResizeWindow(obt_display, focus_indicator.top.window, x, y, w, h); a_focus_indicator->texture[0].data.lineart.x1 = 0; a_focus_indicator->texture[0].data.lineart.y1 = h-1;

@@ -184,7 +184,7 @@ a_focus_indicator->texture[3].data.lineart.x1 = (wl-1);

a_focus_indicator->texture[3].data.lineart.y1 = h-1; a_focus_indicator->texture[3].data.lineart.x2 = w - wr; a_focus_indicator->texture[3].data.lineart.y2 = h-1; - RrPaint(a_focus_indicator, focus_indicator.top.win, + RrPaint(a_focus_indicator, focus_indicator.top.window, w, h); x = c->frame->area.x;

@@ -192,7 +192,7 @@ y = c->frame->area.y;

w = wl; h = c->frame->area.height; - XMoveResizeWindow(obt_display, focus_indicator.left.win, + XMoveResizeWindow(obt_display, focus_indicator.left.window, x, y, w, h); a_focus_indicator->texture[0].data.lineart.x1 = w-1; a_focus_indicator->texture[0].data.lineart.y1 = 0;

@@ -210,7 +210,7 @@ a_focus_indicator->texture[3].data.lineart.x1 = w-1;

a_focus_indicator->texture[3].data.lineart.y1 = wt-1; a_focus_indicator->texture[3].data.lineart.x2 = w-1; a_focus_indicator->texture[3].data.lineart.y2 = h - wb; - RrPaint(a_focus_indicator, focus_indicator.left.win, + RrPaint(a_focus_indicator, focus_indicator.left.window, w, h); x = c->frame->area.x + c->frame->area.width - wr;

@@ -218,7 +218,7 @@ y = c->frame->area.y;

w = wr; h = c->frame->area.height ; - XMoveResizeWindow(obt_display, focus_indicator.right.win, + XMoveResizeWindow(obt_display, focus_indicator.right.window, x, y, w, h); a_focus_indicator->texture[0].data.lineart.x1 = 0; a_focus_indicator->texture[0].data.lineart.y1 = 0;

@@ -236,7 +236,7 @@ a_focus_indicator->texture[3].data.lineart.x1 = 0;

a_focus_indicator->texture[3].data.lineart.y1 = wt-1; a_focus_indicator->texture[3].data.lineart.x2 = 0; a_focus_indicator->texture[3].data.lineart.y2 = h - wb; - RrPaint(a_focus_indicator, focus_indicator.right.win, + RrPaint(a_focus_indicator, focus_indicator.right.window, w, h); x = c->frame->area.x;

@@ -244,7 +244,7 @@ y = c->frame->area.y + c->frame->area.height - wb;

w = c->frame->area.width; h = wb; - XMoveResizeWindow(obt_display, focus_indicator.bottom.win, + XMoveResizeWindow(obt_display, focus_indicator.bottom.window, x, y, w, h); a_focus_indicator->texture[0].data.lineart.x1 = 0; a_focus_indicator->texture[0].data.lineart.y1 = 0;

@@ -262,13 +262,13 @@ a_focus_indicator->texture[3].data.lineart.x1 = wl-1;

a_focus_indicator->texture[3].data.lineart.y1 = 0; a_focus_indicator->texture[3].data.lineart.x2 = w - wr; a_focus_indicator->texture[3].data.lineart.y2 = 0; - RrPaint(a_focus_indicator, focus_indicator.bottom.win, + RrPaint(a_focus_indicator, focus_indicator.bottom.window, w, h); - XMapWindow(obt_display, focus_indicator.top.win); - XMapWindow(obt_display, focus_indicator.left.win); - XMapWindow(obt_display, focus_indicator.right.win); - XMapWindow(obt_display, focus_indicator.bottom.win); + XMapWindow(obt_display, focus_indicator.top.window); + XMapWindow(obt_display, focus_indicator.left.window); + XMapWindow(obt_display, focus_indicator.right.window); + XMapWindow(obt_display, focus_indicator.bottom.window); visible = TRUE; }
M openbox/focus_cycle_popup.copenbox/focus_cycle_popup.c

@@ -98,7 +98,7 @@ XSetWindowAttributes attrib;

single_popup = icon_popup_new(); - popup.obwin.type = Window_Internal; + popup.obwin.type = OB_WINDOW_CLASS_INTERNALWINDOW; popup.a_bg = RrAppearanceCopy(ob_rr_theme->osd_hilite_bg); popup.a_text = RrAppearanceCopy(ob_rr_theme->osd_hilite_label); popup.a_icon = RrAppearanceCopy(ob_rr_theme->a_clear_tex);

@@ -127,16 +127,16 @@ popup.hilite_rgba = NULL;

XMapWindow(obt_display, popup.text); - stacking_add(INTERNAL_AS_WINDOW(&popup)); - g_hash_table_insert(window_map, &popup.bg, &popup); + stacking_add(INTERNALWINDOW_AS_WINDOW(&popup)); + window_add(&popup.bg, INTERNALWINDOW_AS_WINDOW(&popup)); } void focus_cycle_popup_shutdown(gboolean reconfig) { icon_popup_free(single_popup); - g_hash_table_remove(window_map, &popup.bg); - stacking_remove(INTERNAL_AS_WINDOW(&popup)); + window_remove(popup.bg); + stacking_remove(INTERNALWINDOW_AS_WINDOW(&popup)); while(popup.targets) { ObFocusCyclePopupTarget *t = popup.targets->data;
M openbox/frame.copenbox/frame.c

@@ -999,51 +999,51 @@ req's) the ButtonPress is to catch clicks on the client border */

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)

@@ -1083,51 +1083,51 @@ 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); + 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); }
M openbox/menuframe.copenbox/menuframe.c

@@ -77,7 +77,7 @@ ObMenuFrame *self;

XSetWindowAttributes attr; self = g_new0(ObMenuFrame, 1); - self->type = Window_Menu; + self->type = OB_WINDOW_CLASS_MENUFRAME; self->menu = menu; self->selected = NULL; self->client = client;

@@ -95,7 +95,8 @@

self->a_title = RrAppearanceCopy(ob_rr_theme->a_menu_title); 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; }

@@ -108,7 +109,8 @@ menu_entry_frame_free(self->entries->data);

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); XDestroyWindow(obt_display, self->window);

@@ -179,6 +181,8 @@ RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled_selected);

self->a_text_title = RrAppearanceCopy(ob_rr_theme->a_menu_text_title); + window_add(&self->window, MENUFRAME_AS_WINDOW(self->frame)); + return self; }

@@ -186,6 +190,8 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self)

{ if (self) { menu_entry_unref(self->entry); + + window_remove(self->window); XDestroyWindow(obt_display, self->text); XDestroyWindow(obt_display, self->window);
M openbox/openbox.copenbox/openbox.c

@@ -302,8 +302,7 @@

/* focus what was focused if a wm was already running */ if (OBT_PROP_GET32(RootWindow(obt_display, ob_screen), NET_ACTIVE_WINDOW, WINDOW, &xid) && - (w = g_hash_table_lookup(window_map, &xid)) && - WINDOW_IS_CLIENT(w)) + (w = window_find(xid)) && WINDOW_IS_CLIENT(w)) { client_focus(WINDOW_AS_CLIENT(w)); }
M openbox/popup.copenbox/popup.c

@@ -33,7 +33,7 @@ {

XSetWindowAttributes attrib; ObPopup *self = g_new0(ObPopup, 1); - self->obwin.type = Window_Internal; + self->obwin.type = OB_WINDOW_CLASS_INTERNALWINDOW; self->gravity = NorthWestGravity; self->x = self->y = self->textw = self->h = 0; self->a_bg = RrAppearanceCopy(ob_rr_theme->osd_hilite_bg);

@@ -56,8 +56,8 @@ RrColorPixel(ob_rr_theme->osd_border_color));

XMapWindow(obt_display, self->text); - stacking_add(INTERNAL_AS_WINDOW(self)); - g_hash_table_insert(window_map, &self->bg, self); + stacking_add(INTERNALWINDOW_AS_WINDOW(self)); + window_add(&self->bg, INTERNALWINDOW_AS_WINDOW(self)); return self; }

@@ -68,7 +68,7 @@ XDestroyWindow(obt_display, self->bg);

XDestroyWindow(obt_display, self->text); RrAppearanceFree(self->a_bg); RrAppearanceFree(self->a_text); - g_hash_table_remove(window_map, &self->bg); + window_remove(self->bg); stacking_remove(self); g_free(self); }

@@ -141,7 +141,7 @@ {

ObPopup *self = data; XMapWindow(obt_display, self->bg); - stacking_raise(INTERNAL_AS_WINDOW(self)); + stacking_raise(INTERNALWINDOW_AS_WINDOW(self)); self->mapped = TRUE; self->delay_mapped = FALSE;
M openbox/window.copenbox/window.c

@@ -23,7 +23,7 @@ #include "dock.h"

#include "client.h" #include "frame.h" -GHashTable *window_map; +static GHashTable *window_map; static guint window_hash(Window *w) { return *w; } static gboolean window_comp(Window *w1, Window *w2) { return *w1 == *w2; }

@@ -46,18 +46,14 @@

Window window_top(ObWindow *self) { switch (self->type) { - case Window_Menu: - return ((ObMenuFrame*)self)->window; - case Window_Dock: - return ((ObDock*)self)->frame; - case Window_DockApp: - /* not to be used for stacking */ - g_assert_not_reached(); - break; - case Window_Client: - return ((ObClient*)self)->frame->window; - case Window_Internal: - return ((InternalWindow*)self)->win; + case OB_WINDOW_CLASS_MENUFRAME: + return WINDOW_AS_MENUFRAME(self)->window; + case OB_WINDOW_CLASS_DOCK: + return WINDOW_AS_DOCK(self)->frame; + case OB_WINDOW_CLASS_CLIENT: + return WINDOW_AS_CLIENT(self)->frame->window; + case OB_WINDOW_CLASS_INTERNALWINDOW: + return WINDOW_AS_INTERNALWINDOW(self)->window; } g_assert_not_reached(); return None;

@@ -66,19 +62,33 @@

ObStackingLayer window_layer(ObWindow *self) { switch (self->type) { - case Window_Menu: - return OB_STACKING_LAYER_INTERNAL; - case Window_Dock: + case OB_WINDOW_CLASS_DOCK: return config_dock_layer; - case Window_DockApp: - /* not to be used for stacking */ - g_assert_not_reached(); - break; - case Window_Client: + case OB_WINDOW_CLASS_CLIENT: return ((ObClient*)self)->layer; - case Window_Internal: + case OB_WINDOW_CLASS_MENUFRAME: + case OB_WINDOW_CLASS_INTERNALWINDOW: return OB_STACKING_LAYER_INTERNAL; } g_assert_not_reached(); return None; } + +ObWindow* window_find(Window xwin) +{ + g_assert(xwin != None); + return g_hash_table_lookup(window_map, &xwin); +} + +void window_add(Window *xwin, ObWindow *win) +{ + g_assert(xwin != NULL); + g_assert(win != NULL); + g_hash_table_insert(window_map, xwin, win); +} + +void window_remove(Window xwin) +{ + g_assert(xwin != None); + g_hash_table_remove(window_map, &xwin); +}
M openbox/window.hopenbox/window.h

@@ -28,55 +28,56 @@ typedef struct _ObWindow ObWindow;

typedef struct _ObInternalWindow ObInternalWindow; typedef enum { - Window_Menu, - Window_Dock, - Window_DockApp, /* used for events but not stacking */ - Window_Client, - Window_Internal /* used for stacking but not events (except to filter - events on the root window) */ + OB_WINDOW_CLASS_MENUFRAME, + OB_WINDOW_CLASS_DOCK, + OB_WINDOW_CLASS_CLIENT, + OB_WINDOW_CLASS_INTERNALWINDOW } Window_InternalType; -struct _ObWindow -{ +/* In order to be an ObWindow, you need to make this struct the top of your + struct */ +struct _ObWindow { Window_InternalType type; }; -/* Wrapper for internal stuff. If its struct matches this then it can be used - as an ObWindow */ -typedef struct InternalWindow { - ObWindow obwin; - Window win; -} InternalWindow; - -#define WINDOW_IS_MENU(win) (((ObWindow*)win)->type == Window_Menu) -#define WINDOW_IS_DOCK(win) (((ObWindow*)win)->type == Window_Dock) -#define WINDOW_IS_DOCKAPP(win) (((ObWindow*)win)->type == Window_DockApp) -#define WINDOW_IS_CLIENT(win) (((ObWindow*)win)->type == Window_Client) -#define WINDOW_IS_INTERNAL(win) (((ObWindow*)win)->type == Window_Internal) +#define WINDOW_IS_MENUFRAME(win) \ + (((ObWindow*)win)->type == OB_WINDOW_CLASS_MENUFRAME) +#define WINDOW_IS_DOCK(win) \ + (((ObWindow*)win)->type == OB_WINDOW_CLASS_DOCK) +#define WINDOW_IS_CLIENT(win) \ + (((ObWindow*)win)->type == OB_WINDOW_CLASS_CLIENT) +#define WINDOW_IS_INTERNALWINDOW(win) \ + (((ObWindow*)win)->type == OB_WINDOW_CLASS_INTERNALWINDOW) struct _ObMenu; struct _ObDock; struct _ObDockApp; struct _ObClient; -#define WINDOW_AS_MENU(win) ((struct _ObMenuFrame*)win) +#define WINDOW_AS_MENUFRAME(win) ((struct _ObMenuFrame*)win) #define WINDOW_AS_DOCK(win) ((struct _ObDock*)win) -#define WINDOW_AS_DOCKAPP(win) ((struct _ObDockApp*)win) #define WINDOW_AS_CLIENT(win) ((struct _ObClient*)win) -#define WINDOW_AS_INTERNAL(win) ((struct InternalWindow*)win) +#define WINDOW_AS_INTERNALWINDOW(win) ((struct _ObInternalWindow*)win) -#define MENU_AS_WINDOW(menu) ((ObWindow*)menu) +#define MENUFRAME_AS_WINDOW(menu) ((ObWindow*)menu) #define DOCK_AS_WINDOW(dock) ((ObWindow*)dock) -#define DOCKAPP_AS_WINDOW(dockapp) ((ObWindow*)dockapp) #define CLIENT_AS_WINDOW(client) ((ObWindow*)client) -#define INTERNAL_AS_WINDOW(intern) ((ObWindow*)intern) - -extern GHashTable *window_map; +#define INTERNALWINDOW_AS_WINDOW(intern) ((ObWindow*)intern) -void window_startup(gboolean reconfig); +void window_startup (gboolean reconfig); void window_shutdown(gboolean reconfig); -Window window_top(ObWindow *self); +Window window_top (ObWindow *self); ObStackingLayer window_layer(ObWindow *self); + +ObWindow* window_find (Window xwin); +void window_add (Window *xwin, ObWindow *win); +void window_remove(Window xwin); + +/* Internal openbox-owned windows like the alt-tab popup */ +struct _ObInternalWindow { + ObWindow obwin; + Window window; +}; #endif