From: Dana Jansens Date: Sun, 2 Mar 2008 09:18:17 +0000 (-0500) Subject: Merge branch 'backport' into work X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=37705f444eecabb2e5bd31e92bc8b82ae9b8b596;hp=-c;p=chaz%2Fopenbox Merge branch 'backport' into work Conflicts: openbox/actions/all.h openbox/event.c openbox/prompt.c --- 37705f444eecabb2e5bd31e92bc8b82ae9b8b596 diff --combined Makefile.am index 90277596,6a6f1754..00d7998a --- a/Makefile.am +++ b/Makefile.am @@@ -8,8 -8,7 +8,8 @@@ rcdir = $(configdir)/openbo xsessionsdir = $(datadir)/xsessions gnomewmfilesdir = $(datadir)/gnome/wm-properties pkgconfigdir = $(libdir)/pkgconfig -pubincludedir = $(includedir)/openbox/@OB_VERSION@/openbox +obtpubincludedir= $(includedir)/openbox/@OBT_VERSION@/obt +rrpubincludedir = $(includedir)/openbox/@RR_VERSION@/render pixmapdir = $(datadir)/pixmaps xsddir = $(datadir)/openbox secretbindir = $(libdir)/openbox @@@ -26,11 -25,12 +26,12 @@@ check_PROGRAMS = render/rendertest lib_LTLIBRARIES = \ - parser/libobparser.la \ + obt/libobt.la \ render/libobrender.la bin_PROGRAMS = \ openbox/openbox \ + tools/gdm-control/gdm-control \ tools/gnome-panel-control/gnome-panel-control dist_secretbin_SCRIPTS = \ @@@ -49,7 -49,7 +50,7 @@@ render_rendertest_CPPFLAGS = $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\"RenderTest\" render_rendertest_LDADD = \ - parser/libobparser.la \ + obt/libobt.la \ render/libobrender.la \ $(GLIB_LIBS) \ $(PANGO_LIBS) \ @@@ -67,9 -67,9 +68,9 @@@ render_libobrender_la_CPPFLAGS = -DG_LOG_DOMAIN=\"ObRender\" \ -DDEFAULT_THEME=\"$(theme)\" render_libobrender_la_LDFLAGS = \ - -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) + -version-info $(RR_CURRENT):$(RR_REVISION):$(RR_AGE) render_libobrender_la_LIBADD = \ - parser/libobparser.la \ + obt/libobt.la \ $(X_LIBS) \ $(PANGO_LIBS) \ $(XFT_LIBS) \ @@@ -98,52 -98,33 +99,52 @@@ render_libobrender_la_SOURCES = render/theme.h \ render/theme.c -## parser ## +## obt ## -parser_libobparser_la_CPPFLAGS = \ +obt_libobt_la_CPPFLAGS = \ + $(XINERAMA_CFLAGS) \ + $(XKB_CFLAGS) \ + $(XRANDR_CFLAGS) \ + $(XSHAPE_CFLAGS) \ + $(XSYNC_CFLAGS) \ $(GLIB_CFLAGS) \ $(XML_CFLAGS) \ - -DG_LOG_DOMAIN=\"ObParser\" \ + -DG_LOG_DOMAIN=\"Obt\" \ -DLOCALEDIR=\"$(localedir)\" \ -DDATADIR=\"$(datadir)\" \ -DCONFIGDIR=\"$(configdir)\" -parser_libobparser_la_LDFLAGS = \ - -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -parser_libobparser_la_LIBADD = \ +obt_libobt_la_LDFLAGS = \ + -version-info $(OBT_CURRENT):$(OBT_REVISION):$(OBT_AGE) +obt_libobt_la_LIBADD = \ + $(XINERAMA_LIBS) \ + $(XKB_LIBS) \ + $(XRANDR_LIBS) \ + $(XSHAPE_LIBS) \ + $(XSYNC_LIBS) \ $(GLIB_LIBS) \ - $(XML_LIBS) -parser_libobparser_la_SOURCES = \ - parser/parse.h \ - parser/parse.c + $(XML_LIBS) +obt_libobt_la_SOURCES = \ + obt/display.h \ + obt/display.c \ + obt/internal.h \ + obt/keyboard.h \ + obt/keyboard.c \ + obt/mainloop.h \ + obt/mainloop.c \ + obt/parse.h \ + obt/parse.c \ + obt/paths.h \ + obt/paths.c \ + obt/prop.h \ + obt/prop.c \ + obt/util.h \ + obt/xevent.h \ + obt/xevent.c ## openbox ## openbox_openbox_CPPFLAGS = \ $(SM_CFLAGS) \ - $(XINERAMA_CFLAGS) \ - $(XKB_CFLAGS) \ - $(XRANDR_CFLAGS) \ - $(XSHAPE_CFLAGS) \ - $(XSYNC_CFLAGS) \ $(X_CFLAGS) \ $(XCURSOR_CFLAGS) \ $(SM_CFLAGS) \ @@@ -157,6 -138,11 +158,6 @@@ -DG_LOG_DOMAIN=\"Openbox\" openbox_openbox_LDADD = \ $(SM_LIBS) \ - $(XINERAMA_LIBS) \ - $(XKB_LIBS) \ - $(XRANDR_LIBS) \ - $(XSHAPE_LIBS) \ - $(XSYNC_LIBS) \ $(GLIB_LIBS) \ $(X_LIBS) \ $(XCURSOR_LIBS) \ @@@ -165,7 -151,7 +166,7 @@@ $(EFENCE_LIBS) \ $(LIBINTL) \ render/libobrender.la \ - parser/libobparser.la + obt/libobt.la openbox_openbox_LDFLAGS = -export-dynamic openbox_openbox_SOURCES = \ gettext.h \ @@@ -190,6 -176,7 +191,7 @@@ openbox/actions/if.c \ openbox/actions/kill.c \ openbox/actions/layer.c \ + openbox/actions/session.c \ openbox/actions/lower.c \ openbox/actions/maximize.c \ openbox/actions/move.c \ @@@ -225,6 -212,8 +227,6 @@@ openbox/dock.h \ openbox/event.c \ openbox/event.h \ - openbox/extensions.c \ - openbox/extensions.h \ openbox/focus.c \ openbox/focus.h \ openbox/focus_cycle.c \ @@@ -242,17 -231,19 +244,17 @@@ openbox/grab.h \ openbox/group.c \ openbox/group.h \ + openbox/hooks.c \ + openbox/hooks.h \ openbox/keyboard.c \ openbox/keyboard.h \ openbox/keytree.c \ openbox/keytree.h \ - openbox/mainloop.c \ - openbox/mainloop.h \ openbox/menuframe.c \ openbox/menuframe.h \ openbox/menu.c \ openbox/menu.h \ openbox/misc.h \ - openbox/modkeys.c \ - openbox/modkeys.h \ openbox/mouse.c \ openbox/mouse.h \ openbox/moveresize.c \ @@@ -268,6 -259,8 +270,6 @@@ openbox/prompt.h \ openbox/popup.c \ openbox/popup.h \ - openbox/prop.c \ - openbox/prop.h \ openbox/resist.c \ openbox/resist.h \ openbox/screen.c \ @@@ -281,7 -274,10 +283,7 @@@ openbox/translate.c \ openbox/translate.h \ openbox/window.c \ - openbox/window.h \ - openbox/xerror.c \ - openbox/xerror.h - + openbox/window.h ## gnome-panel-control ## @@@ -292,6 -288,17 +294,17 @@@ tools_gnome_panel_control_gnome_panel_c tools_gnome_panel_control_gnome_panel_control_SOURCES = \ tools/gnome-panel-control/gnome-panel-control.c + ## gdm-control ## + + tools_gdm_control_gdm_control_CPPFLAGS = \ + $(X_CFLAGS) \ + $(GLIB_CFLAGS) + tools_gdm_control_gdm_control_LDADD = \ + $(X_LIBS) \ + $(GLIB_LIBS) + tools_gdm_control_gdm_control_SOURCES = \ + tools/gdm-control/gdm-control.c + ## default button masks ## dist_docxbm_DATA = \ @@@ -387,7 -394,7 +400,7 @@@ dist_syscrash_theme_DATA= ## public headers ## -pubinclude_HEADERS = \ +rrpubinclude_HEADERS = \ render/color.h \ render/font.h \ render/geom.h \ @@@ -397,22 -404,14 +410,22 @@@ render/mask.h \ render/render.h \ render/theme.h \ - parser/parse.h - -nodist_pubinclude_HEADERS = \ - version.h + render/version.h + +obtpubinclude_HEADERS = \ + obt/display.h \ + obt/keyboard.h \ + obt/mainloop.h \ + obt/parse.h \ + obt/paths.h \ + obt/prop.h \ + obt/util.h \ + obt/version.h \ + obt/xevent.h nodist_pkgconfig_DATA = \ - render/obrender-3.0.pc \ - parser/obparser-3.0.pc + render/obrender-4.0.pc \ + obt/obt-4.0.pc ## data ## @@@ -461,6 -460,7 +474,6 @@@ nodist_xsessions_DATA = data/xsession/openbox-kde.desktop dist_noinst_DATA = \ - version.h.in \ data/autostart.sh.in \ data/rc.xsd \ data/menu.xsd \ @@@ -478,10 -478,8 +491,10 @@@ doc/openbox-gnome-session.1.in \ doc/openbox-kde-session.1.sgml \ doc/openbox-kde-session.1.in \ - render/obrender-3.0.pc.in \ - parser/obparser-3.0.pc.in \ + render/version.h.in \ + render/obrender-4.0.pc.in \ + obt/obt-4.0.pc.in \ + obt/version.h.in \ tools/themeupdate/themeupdate.py \ tests/hideshow.py \ tests/Makefile \ @@@ -537,7 -535,7 +550,7 @@@ CLEANFILES = # $(MAKE) -$(MAKEFLAGS) -C doc/doxygen doc distclean-local: - for d in . m4 po render; do \ + for d in . m4 po render parser obt openbox; do \ for p in core core.* gmon.out *\~ *.orig *.rej .\#*; do \ rm -f "$$d/$$p"; \ done \ diff --combined openbox/actions/all.h index 35e1537c,4fbd6ff5..909836ae --- a/openbox/actions/all.h +++ b/openbox/actions/all.h @@@ -1,43 -1,44 +1,44 @@@ #ifndef __actions_all_h #define __actions_all_h -void action_all_startup(); +void action_all_startup(void); -void action_execute_startup(); -void action_debug_startup(); -void action_showmenu_startup(); -void action_showdesktop_startup(); -void action_reconfigure_startup(); -void action_exit_startup(); -void action_restart_startup(); -void action_session_startup(); -void action_cyclewindows_startup(); -void action_breakchroot_startup(); -void action_close_startup(); -void action_move_startup(); -void action_focus_startup(); -void action_raise_startup(); -void action_lower_startup(); -void action_raiselower_startup(); -void action_unfocus_startup(); -void action_iconify_startup(); -void action_fullscreen_startup(); -void action_maximize_startup(); -void action_moveresizeto_startup(); -void action_moverelative_startup(); -void action_shade_startup(); -void action_kill_startup(); -void action_omnipresent_startup(); -void action_directionalwindows_startup(); -void action_resize_startup(); -void action_decorations_startup(); -void action_desktop_startup(); -void action_resizerelative_startup(); -void action_addremovedesktop_startup(); -void action_dockautohide_startup(); -void action_layer_startup(); -void action_movetoedge_startup(); -void action_growtoedge_startup(); -void action_if_startup(); -void action_focustobottom_startup(); +void action_execute_startup(void); +void action_debug_startup(void); +void action_showmenu_startup(void); +void action_showdesktop_startup(void); +void action_reconfigure_startup(void); +void action_exit_startup(void); +void action_restart_startup(void); ++void action_session_startup(void); +void action_cyclewindows_startup(void); +void action_breakchroot_startup(void); +void action_close_startup(void); +void action_move_startup(void); +void action_focus_startup(void); +void action_raise_startup(void); +void action_lower_startup(void); +void action_raiselower_startup(void); +void action_unfocus_startup(void); +void action_iconify_startup(void); +void action_fullscreen_startup(void); +void action_maximize_startup(void); +void action_moveresizeto_startup(void); +void action_moverelative_startup(void); +void action_shade_startup(void); +void action_kill_startup(void); +void action_omnipresent_startup(void); +void action_directionalwindows_startup(void); +void action_resize_startup(void); +void action_decorations_startup(void); +void action_desktop_startup(void); +void action_resizerelative_startup(void); +void action_addremovedesktop_startup(void); +void action_dockautohide_startup(void); +void action_layer_startup(void); +void action_movetoedge_startup(void); +void action_growtoedge_startup(void); +void action_if_startup(void); +void action_focustobottom_startup(void); #endif diff --combined openbox/actions/exit.c index 58a1dcb1,747514f6..25fc08bc --- a/openbox/actions/exit.c +++ b/openbox/actions/exit.c @@@ -7,7 -7,7 +7,7 @@@ typedef struct gboolean prompt; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_exit_startup(void) @@@ -15,15 -15,16 +15,16 @@@ actions_register("Exit", setup_func, NULL, run_func, NULL, NULL); } -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->prompt = TRUE; - if ((n = parse_find_node("prompt", node))) - o->prompt = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "prompt"))) + o->prompt = obt_parse_node_bool(n); return o; } diff --combined openbox/actions/session.c index 00000000,0117e07c..cfc5e377 mode 000000,100644..100644 --- a/openbox/actions/session.c +++ b/openbox/actions/session.c @@@ -1,0 -1,71 +1,71 @@@ + #include "openbox/actions.h" + #include "openbox/prompt.h" + #include "openbox/session.h" + #include "gettext.h" + + #ifndef USE_SM + void action_logout_startup(void) {} + #else + + typedef struct { + gboolean prompt; + gboolean silent; + } Options; + -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); ++static gpointer setup_func(xmlNodePtr node); + static gboolean logout_func(ObActionsData *data, gpointer options); + + void action_session_startup(void) + { + actions_register("SessionLogout", setup_func, NULL, logout_func, + NULL, NULL); + } + -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->prompt = TRUE; + - if ((n = parse_find_node("prompt", node))) - o->prompt = parse_bool(doc, n); ++ if ((n = obt_parse_find_node(node, "prompt"))) ++ o->prompt = obt_parse_node_bool(n); + + return o; + } + + static void prompt_cb(ObPrompt *p, gint result, gpointer data) + { + Options *o = data; + if (result) + session_request_logout(o->silent); + g_free(o); + prompt_unref(p); + } + + /* Always return FALSE because its not interactive */ + static gboolean logout_func(ObActionsData *data, gpointer options) + { + Options *o = options; + + if (o->prompt) { + Options *o2; + ObPrompt *p; + ObPromptAnswer answers[] = { + { _("Cancel"), 0 }, + { _("Log out"), 1 } + }; + + o2 = g_memdup(o, sizeof(Options)); + p = prompt_new(_("Are you sure you want to log out?"), + answers, 2, 0, 0, prompt_cb, o2); + prompt_show(p, NULL, FALSE); + } + else + prompt_cb(NULL, 1, NULL); + + return FALSE; + } + + #endif diff --combined openbox/event.c index 2563be2b,5c4700ae..d1c345ab --- 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,16 -34,17 +32,16 @@@ #include "prompt.h" #include "menuframe.h" #include "keyboard.h" -#include "modkeys.h" #include "mouse.h" -#include "mainloop.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 @@@ -84,8 -87,8 +84,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); @@@ -122,9 -125,9 +122,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; } } @@@ -134,7 -137,7 +134,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); @@@ -161,15 -164,9 +161,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: @@@ -186,9 -183,7 +186,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; @@@ -198,8 -193,8 +198,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 @@@ -237,8 -232,8 +237,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; } @@@ -266,34 -261,34 +266,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; @@@ -323,7 -318,7 +323,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) @@@ -344,7 -339,7 +344,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; } @@@ -377,7 -372,7 +377,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.. */ @@@ -433,7 -428,7 +433,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); @@@ -459,15 -454,13 +459,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 */ @@@ -475,31 -468,31 +475,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; @@@ -513,7 -506,12 +513,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) { @@@ -538,7 -536,7 +538,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) @@@ -559,12 -557,12 +559,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. @@@ -580,7 -578,7 +580,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. @@@ -599,25 -597,25 +599,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 { @@@ -628,7 -626,7 +628,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); } @@@ -646,25 -644,22 +646,25 @@@ 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"); - modkeys_shutdown(TRUE); - modkeys_startup(TRUE); + ob_debug("Kepboard map changed. Reloading keyboard bindings."); + obt_keyboard_reload(); keyboard_rebind(); } 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); @@@ -675,8 -670,8 +675,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); @@@ -697,14 -692,14 +697,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) @@@ -717,7 -712,7 +717,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); @@@ -727,7 -722,7 +727,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); @@@ -738,11 -733,6 +738,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; @@@ -755,7 -745,7 +755,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; @@@ -763,41 -753,41 +763,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: @@@ -825,17 -815,17 +825,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; @@@ -885,12 -875,12 +885,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; @@@ -1009,7 -999,7 +1009,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)); @@@ -1021,9 -1011,9 +1021,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: @@@ -1054,7 -1044,7 +1054,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, @@@ -1064,7 -1054,7 +1064,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, @@@ -1104,10 -1094,10 +1104,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) @@@ -1131,7 -1121,8 +1131,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) { @@@ -1185,7 -1176,7 +1185,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, @@@ -1211,7 -1202,7 +1211,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; @@@ -1238,25 -1229,25 +1238,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: @@@ -1272,13 -1263,13 +1272,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 @@@ -1293,20 -1284,20 +1293,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"), @@@ -1320,11 -1311,11 +1320,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" : @@@ -1338,50 -1329,50 +1338,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; @@@ -1419,7 -1410,7 +1419,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); @@@ -1429,16 -1420,17 +1429,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) { @@@ -1447,7 -1439,7 +1447,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 || @@@ -1472,7 -1464,7 +1472,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]); } } @@@ -1482,7 -1474,7 +1482,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; @@@ -1494,28 -1486,28 +1494,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); @@@ -1532,30 -1524,30 +1532,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))) { @@@ -1563,7 -1555,7 +1563,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 @@@ -1574,9 -1566,7 +1574,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); } @@@ -1615,11 -1605,11 +1615,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); @@@ -1666,159 -1656,125 +1666,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 */ - menu_frame_select(frame, NULL, TRUE); ++ 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; + } } } } @@@ -1826,12 -1782,27 +1827,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) @@@ -1855,7 -1826,21 +1856,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) @@@ -1865,7 -1850,7 +1866,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 */ @@@ -1889,16 -1874,11 +1890,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); @@@ -1928,20 -1908,20 +1929,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) @@@ -1956,11 -1936,11 +1957,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) @@@ -1971,7 -1951,7 +1972,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) @@@ -1998,24 -1978,24 +1999,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) @@@ -2048,9 -2028,9 +2049,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/prompt.c index 9e91d249,0278757e..7c19bcb1 --- 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; @@@ -145,8 -145,9 +145,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, @@@ -154,19 -155,19 +154,19 @@@ &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)); /* 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 */ @@@ -189,15 -190,16 +189,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); } @@@ -219,12 -221,12 +219,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); } } @@@ -262,7 -264,6 +262,6 @@@ static void prompt_layout(ObPrompt *sel self->button[i].width = bw; self->button[i].height = bh; RrMinSize(prompt_a_focus, &bw, &bh); - g_print("button w %d h %d\n", bw, bh); self->button[i].width = MAX(self->button[i].width, bw); self->button[i].height = MAX(self->button[i].height, bh); RrMinSize(prompt_a_press, &bw, &bh); @@@ -308,11 -309,11 +307,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); } @@@ -329,13 -330,13 +328,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; @@@ -344,7 -345,7 +343,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, @@@ -386,8 -387,6 +385,6 @@@ a->texture[4].data.lineart.x2 = e->width - r - 1; a->texture[4].data.lineart.y1 = t; a->texture[4].data.lineart.y2 = e->height - b - 1; - - g_print("setting x2 %d\n", e->width - r - 1); } static void render_button(ObPrompt *self, ObPromptElement *e) @@@ -440,11 -439,11 +437,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; } @@@ -466,7 -465,7 +463,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 */ @@@ -474,16 -473,15 +471,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); @@@ -496,7 -494,7 +493,7 @@@ void prompt_hide(ObPrompt *self) { - XUnmapWindow(ob_display, self->super.window); + XUnmapWindow(obt_display, self->super.window); self->mapped = FALSE; } @@@ -507,7 -505,7 +504,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 99d66221,4483c051..3cf8fbe2 --- a/openbox/session.c +++ b/openbox/session.c @@@ -33,15 -33,16 +33,16 @@@ GSList *session_desktop_names = NULL void session_startup(gint argc, gchar **argv) {} void session_shutdown(gboolean permanent) {} GList* session_state_find(struct _ObClient *c) { return NULL; } + void session_request_logout(gboolean silent) {} #else #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 @@@ -91,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); } @@@ -159,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; @@@ -177,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 | @@@ -187,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], @@@ -206,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()); @@@ -227,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); @@@ -249,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()); @@@ -270,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); @@@ -278,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 */ @@@ -293,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; @@@ -312,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); @@@ -325,7 -322,7 +326,7 @@@ g_free(vals); } -static void session_setup_restart_command() +static void session_setup_restart_command(void) { gint i; @@@ -338,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); @@@ -367,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. @@@ -385,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); @@@ -396,7 -393,7 +397,7 @@@ /* 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); } @@@ -407,10 -404,10 +408,10 @@@ static void sm_save_yourself(SmcConn co ObSMSaveData *savedata = NULL; gchar *vendor; - ob_debug_type(OB_DEBUG_SM, "Session save requested\n"); + ob_debug_type(OB_DEBUG_SM, "Session save requested"); 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 @@@ -421,7 -418,7 +422,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); } @@@ -429,18 -426,18 +430,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) @@@ -498,18 -495,18 +499,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; @@@ -608,20 -605,20 +609,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)) || @@@ -656,106 -653,101 +657,106 @@@ 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")) { + 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)) + 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 */ @@@ -810,7 -802,23 +811,23 @@@ } } - xmlFreeDoc(doc); + obt_parse_instance_unref(i); } + void session_request_logout(gboolean silent) + { + if (sm_conn) { + SmcRequestSaveYourself(sm_conn, + SmSaveBoth, + TRUE, /* logout */ + (silent ? + SmInteractStyleNone : SmInteractStyleAny), + TRUE, /* if false, with GSM, it shows the old + logout prompt */ + TRUE); /* global */ + } + else + g_message(_("Not connected to a session manager")); + } + #endif