summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-06-10 00:19:02 +0000
committerDana Jansens <danakj@orodu.net>2007-06-10 00:19:02 +0000
commit128209b1c3dd4be15b8ddf5e6e007a335e987549 (patch)
tree1e97179f865ce58fa64d11848f9b3d3c5b10b801 /openbox
parent3124112578c697899498252297cfbf499b1ff66c (diff)
let you use +-+-x in the positions for per-app settings, like x geometry
Diffstat (limited to 'openbox')
-rw-r--r--openbox/config.c16
-rw-r--r--openbox/config.h2
-rw-r--r--openbox/place.c6
3 files changed, 22 insertions, 2 deletions
diff --git a/openbox/config.c b/openbox/config.c
index e34bc158..10a60fb4 100644
--- a/openbox/config.c
+++ b/openbox/config.c
@@ -132,6 +132,8 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src,
dst->pos_given = TRUE;
dst->center_x = src->center_x;
dst->center_y = src->center_y;
+ dst->opposite_x = src->opposite_x;
+ dst->opposite_y = src->opposite_y;
dst->position.x = src->position.x;
dst->position.y = src->position.y;
dst->monitor = src->monitor;
@@ -208,7 +210,12 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
settings->center_x = TRUE;
x_pos_given = TRUE;
} else {
- settings->position.x = parse_int(doc, c);
+ if (s[0] == '-')
+ settings->opposite_x = TRUE;
+ if (s[0] == '-' || s[0] == '+')
+ settings->position.x = atoi(s+1);
+ else
+ settings->position.x = atoi(s);
x_pos_given = TRUE;
}
g_free(s);
@@ -221,7 +228,12 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
settings->center_y = TRUE;
settings->pos_given = TRUE;
} else {
- settings->position.y = parse_int(doc, c);
+ if (s[0] == '-')
+ settings->opposite_y = TRUE;
+ if (s[0] == '-' || s[0] == '+')
+ settings->position.y = atoi(s+1);
+ else
+ settings->position.y = atoi(s);
settings->pos_given = TRUE;
}
g_free(s);
diff --git a/openbox/config.h b/openbox/config.h
index 0a4ad090..f45196e2 100644
--- a/openbox/config.h
+++ b/openbox/config.h
@@ -41,6 +41,8 @@ struct _ObAppSettings
Point position;
gboolean center_x;
gboolean center_y;
+ gboolean opposite_x;
+ gboolean opposite_y;
gboolean pos_given;
guint desktop;
diff --git a/openbox/place.c b/openbox/place.c
index 8f4726f6..0b8309a2 100644
--- a/openbox/place.c
+++ b/openbox/place.c
@@ -432,11 +432,17 @@ static gboolean place_per_app_setting(ObClient *client, gint *x, gint *y,
if (settings->center_x)
*x = screen->x + screen->width / 2 - client->area.width / 2;
+ else if (settings->opposite_x)
+ *x = screen->x + screen->width - client->frame->area.width -
+ settings->position.x;
else
*x = screen->x + settings->position.x;
if (settings->center_y)
*y = screen->y + screen->height / 2 - client->area.height / 2;
+ else if (settings->opposite_y)
+ *y = screen->y + screen->height - client->frame->area.height -
+ settings->position.y;
else
*y = screen->y + settings->position.y;