summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
Diffstat (limited to 'openbox')
-rw-r--r--openbox/actions/all.c1
-rw-r--r--openbox/actions/all.h1
-rw-r--r--openbox/actions/dock.c38
-rw-r--r--openbox/dock.c10
-rw-r--r--openbox/dock.h3
-rw-r--r--openbox/event.c8
-rw-r--r--openbox/frame.c11
-rw-r--r--openbox/frame.h1
-rw-r--r--openbox/mouse.c1
9 files changed, 66 insertions, 8 deletions
diff --git a/openbox/actions/all.c b/openbox/actions/all.c
index 4563e65f..332e79ca 100644
--- a/openbox/actions/all.c
+++ b/openbox/actions/all.c
@@ -30,6 +30,7 @@ void action_all_startup(void)
action_resize_startup();
action_decorations_startup();
action_desktop_startup();
+ action_dock_startup();
action_resizerelative_startup();
action_addremovedesktop_startup();
action_dockautohide_startup();
diff --git a/openbox/actions/all.h b/openbox/actions/all.h
index 6acbc9ca..54d63195 100644
--- a/openbox/actions/all.h
+++ b/openbox/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);
diff --git a/openbox/actions/dock.c b/openbox/actions/dock.c
new file mode 100644
index 00000000..a1f68373
--- /dev/null
+++ b/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;
+}
+
diff --git a/openbox/dock.c b/openbox/dock.c
index 64406d9e..b8a5ff56 100644
--- a/openbox/dock.c
+++ b/openbox/dock.c
@@ -677,6 +677,16 @@ void dock_get_area(Rect *a)
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);
diff --git a/openbox/dock.h b/openbox/dock.h
index 8bc735ee..cb4fd6ca 100644
--- a/openbox/dock.h
+++ b/openbox/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
diff --git a/openbox/event.c b/openbox/event.c
index 46baa6dd..eb69d090 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -709,7 +709,7 @@ static void event_process(const XEvent *ec, gpointer data)
/* ...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_client(ObClient *client, XEvent *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;
diff --git a/openbox/frame.c b/openbox/frame.c
index 9c065c7d..bd9527b0 100644
--- a/openbox/frame.c
+++ b/openbox/frame.c
@@ -1368,18 +1368,27 @@ ObFrameContext frame_context_from_string(const gchar *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
diff --git a/openbox/frame.h b/openbox/frame.h
index 0e28b9f1..915c08db 100644
--- a/openbox/frame.h
+++ b/openbox/frame.h
@@ -53,6 +53,7 @@ typedef enum {
/*! 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;
diff --git a/openbox/mouse.c b/openbox/mouse.c
index 567ec4dc..ddf6851d 100644
--- a/openbox/mouse.c
+++ b/openbox/mouse.c
@@ -66,6 +66,7 @@ ObFrameContext mouse_button_frame_context(ObFrameContext context,
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;