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 \
action_resize_startup();
action_decorations_startup();
action_desktop_startup();
+ action_dock_startup();
action_resizerelative_startup();
action_addremovedesktop_startup();
action_dockautohide_startup();
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);
--- /dev/null
+#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;
+}
+
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);
void dock_get_area(Rect *a);
+void dock_raise_dock(void);
+void dock_lower_dock(void);
+
ObDockApp* dock_find_dockapp(Window xwin);
#endif
/* ...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);
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;
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
/*! 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;
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;