let you use +-+-x in the positions for per-app settings, like x geometry
This commit is contained in:
parent
3124112578
commit
128209b1c3
3 changed files with 22 additions and 2 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue