summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-09-28 09:01:04 +0000
committerDana Jansens <danakj@orodu.net>2003-09-28 09:01:04 +0000
commit8e63ffdabdc3be3ad355dcaddd47d8e71c510739 (patch)
tree812cd466685f5c2bb333f6cf0e08e7d09b4fdbbb /openbox
parentfa962c1604bac1b5a6c3656b71c3145436f2392b (diff)
add option for under-mouse placement
Diffstat (limited to 'openbox')
-rw-r--r--openbox/config.c18
-rw-r--r--openbox/config.h3
-rw-r--r--openbox/place.c2
-rw-r--r--openbox/place.h8
4 files changed, 29 insertions, 2 deletions
diff --git a/openbox/config.c b/openbox/config.c
index aebf433f..2c787e4b 100644
--- a/openbox/config.c
+++ b/openbox/config.c
@@ -29,6 +29,8 @@ gboolean config_focus_follow;
guint config_focus_delay;
guint config_focus_raise;
+ObPlacePolicy config_place_policy;
+
char *config_theme;
gchar *config_title_layout;
@@ -207,6 +209,18 @@ static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
config_focus_raise = parse_bool(doc, n);
}
+static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
+ void *d)
+{
+ xmlNodePtr n;
+
+ node = node->children;
+
+ if ((n = parse_find_node("policy", node)))
+ if (parse_contains("UnderMouse", doc, n))
+ config_place_policy = OB_PLACE_POLICY_MOUSE;
+}
+
static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
void *d)
{
@@ -478,6 +492,10 @@ void config_startup(ObParseInst *i)
parse_register(i, "focus", parse_focus, NULL);
+ config_place_policy = OB_PLACE_POLICY_SMART;
+
+ parse_register(i, "placement", parse_placement, NULL);
+
config_theme = NULL;
config_title_layout = g_strdup("NLIMC");
diff --git a/openbox/config.h b/openbox/config.h
index 465bff45..a2cfce3b 100644
--- a/openbox/config.h
+++ b/openbox/config.h
@@ -21,6 +21,7 @@
#include "misc.h"
#include "stacking.h"
+#include "place.h"
#include <glib.h>
@@ -36,6 +37,8 @@ extern guint config_focus_delay;
focus follows mouse */
extern guint config_focus_raise;
+extern ObPlacePolicy config_place_policy;
+
/*! When true windows' contents are refreshed while they are resized; otherwise
they are not updated until the resize is complete */
extern gboolean config_redraw_resize;
diff --git a/openbox/place.c b/openbox/place.c
index 044743bc..19fa597a 100644
--- a/openbox/place.c
+++ b/openbox/place.c
@@ -374,7 +374,7 @@ void place_client(ObClient *client, gint *x, gint *y)
return;
if (place_transient(client, x, y) ||
place_dialog(client, x, y) ||
- ((config_focus_follow && config_focus_new) ?
+ ((config_place_policy == OB_PLACE_POLICY_MOUSE) ?
place_under_mouse(client, x, y) :
place_smart(client, x, y, SMART_FULL) ||
place_smart(client, x, y, SMART_GROUP) ||
diff --git a/openbox/place.h b/openbox/place.h
index 02372320..1d35888c 100644
--- a/openbox/place.h
+++ b/openbox/place.h
@@ -23,6 +23,12 @@
struct _ObClient;
-void place_client(ObClient *client, gint *x, gint *y);
+typedef enum
+{
+ OB_PLACE_POLICY_SMART,
+ OB_PLACE_POLICY_MOUSE
+} ObPlacePolicy;
+
+void place_client(struct _ObClient *client, gint *x, gint *y);
#endif