let you use +-+-x in the positions for per-app settings, like x geometry

This commit is contained in:
Dana Jansens 2007-06-10 00:19:02 +00:00
parent 3124112578
commit 128209b1c3
3 changed files with 22 additions and 2 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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;