all repos — openbox @ 1ffc0021325e30db7bb7f8b2a17ca7f5546b3324

openbox fork - make it a bit more like ryudo

Make the dock a context and add actions LowerDock and RaiseDock
Mikael Magnusson mikachu@gmail.com
commit

1ffc0021325e30db7bb7f8b2a17ca7f5546b3324

parent

48d36cd587e70b9680f65811d08038496a9ccc12

M Makefile.amMakefile.am

@@ -188,6 +188,7 @@ openbox/actions/cyclewindows.c \

openbox/actions/debug.c \ openbox/actions/decorations.c \ openbox/actions/desktop.c \ + openbox/actions/dock.c \ openbox/actions/dockautohide.c \ openbox/actions/directionalwindows.c \ openbox/actions/execute.c \
M openbox/actions/all.copenbox/actions/all.c

@@ -30,6 +30,7 @@ action_directionalwindows_startup();

action_resize_startup(); action_decorations_startup(); action_desktop_startup(); + action_dock_startup(); action_resizerelative_startup(); action_addremovedesktop_startup(); action_dockautohide_startup();
M openbox/actions/all.hopenbox/actions/all.h

@@ -31,6 +31,7 @@ void action_directionalwindows_startup(void);

void action_resize_startup(void); void action_decorations_startup(void); void action_desktop_startup(void); +void action_dock_startup(void); void action_resizerelative_startup(void); void action_addremovedesktop_startup(void); void action_dockautohide_startup(void);
A openbox/actions/dock.c

@@ -0,0 +1,38 @@

+#include "openbox/actions.h" +#include "openbox/stacking.h" +#include "openbox/window.h" +#include "openbox/dock.h" + +static gboolean raise_func(ObActionsData *data, gpointer options); +static gboolean lower_func(ObActionsData *data, gpointer options); + +void action_dock_startup(void) +{ + actions_register("RaiseDock", + NULL, NULL, + raise_func); + actions_register("LowerDock", + NULL, NULL, + lower_func); +} + +/* Always return FALSE because its not interactive */ +static gboolean raise_func(ObActionsData *data, gpointer options) +{ + actions_client_move(data, TRUE); + dock_raise_dock(); + actions_client_move(data, FALSE); + + return FALSE; +} + +/* Always return FALSE because its not interactive */ +static gboolean lower_func(ObActionsData *data, gpointer options) +{ + actions_client_move(data, TRUE); + dock_lower_dock(); + actions_client_move(data, FALSE); + + return FALSE; +} +
M openbox/dock.copenbox/dock.c

@@ -677,6 +677,16 @@ RECT_SET(*a, dock->area.x, dock->area.y,

dock->area.width, dock->area.height); } +void dock_raise_dock(void) +{ + stacking_raise(DOCK_AS_WINDOW(dock)); +} + +void dock_lower_dock(void) +{ + stacking_lower(DOCK_AS_WINDOW(dock)); +} + ObDockApp* dock_find_dockapp(Window xwin) { return g_hash_table_lookup(dock->dock_map, &xwin);
M openbox/dock.hopenbox/dock.h

@@ -80,6 +80,9 @@ void dock_app_configure(ObDockApp *app, gint w, gint h);

void dock_get_area(Rect *a); +void dock_raise_dock(void); +void dock_lower_dock(void); + ObDockApp* dock_find_dockapp(Window xwin); #endif
M openbox/event.copenbox/event.c

@@ -709,7 +709,7 @@ pressed == e->xbutton.button ||

/* ...or it if it was physically on an openbox internal window... */ ((w = window_find(e->xbutton.subwindow)) && - WINDOW_IS_INTERNAL(w))) + (WINDOW_IS_INTERNAL(w) || WINDOW_IS_DOCK(w)))) /* ...then process the event, otherwise ignore it */ { used = event_handle_user_input(client, e);

@@ -1712,12 +1712,6 @@

static void event_handle_dock(ObDock *s, XEvent *e) { switch (e->type) { - case ButtonPress: - if (e->xbutton.button == 1) - stacking_raise(DOCK_AS_WINDOW(s)); - else if (e->xbutton.button == 2) - stacking_lower(DOCK_AS_WINDOW(s)); - break; case EnterNotify: dock_hide(FALSE); break;
M openbox/frame.copenbox/frame.c

@@ -1368,18 +1368,27 @@ else if (!g_ascii_strcasecmp("Close", name))

return OB_FRAME_CONTEXT_CLOSE; else if (!g_ascii_strcasecmp("MoveResize", name)) return OB_FRAME_CONTEXT_MOVE_RESIZE; + else if (!g_ascii_strcasecmp("Dock", name)) + return OB_FRAME_CONTEXT_DOCK; + return OB_FRAME_CONTEXT_NONE; } ObFrameContext frame_context(ObClient *client, Window win, gint x, gint y) { ObFrame *self; + ObWindow *obwin; if (moveresize_in_progress) return OB_FRAME_CONTEXT_MOVE_RESIZE; if (win == obt_root(ob_screen)) - return OB_FRAME_CONTEXT_ROOT ; + return OB_FRAME_CONTEXT_ROOT; + if ((obwin = window_find(win))) { + if (WINDOW_IS_DOCK(obwin)) { + return OB_FRAME_CONTEXT_DOCK; + } + } if (client == NULL) return OB_FRAME_CONTEXT_NONE; if (win == client->window) { /* conceptually, this is the desktop, as far as users are
M openbox/frame.hopenbox/frame.h

@@ -53,6 +53,7 @@ OB_FRAME_CONTEXT_CLOSE,

/*! This is a special context, which occurs while dragging a window in a move/resize */ OB_FRAME_CONTEXT_MOVE_RESIZE, + OB_FRAME_CONTEXT_DOCK, OB_FRAME_NUM_CONTEXTS } ObFrameContext;
M openbox/mouse.copenbox/mouse.c

@@ -66,6 +66,7 @@ case OB_FRAME_CONTEXT_FRAME:

case OB_FRAME_CONTEXT_MOVE_RESIZE: case OB_FRAME_CONTEXT_LEFT: case OB_FRAME_CONTEXT_RIGHT: + case OB_FRAME_CONTEXT_DOCK: break; case OB_FRAME_CONTEXT_ROOT: x = OB_FRAME_CONTEXT_DESKTOP;