From: Dana Jansens Date: Sun, 10 Jun 2007 00:46:10 +0000 (+0000) Subject: merge r7464-65 from trunk X-Git-Tag: release-3.4.3~84 X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=c342716bce9ea5550818785dfd63c451e196bcd0;p=dana%2Fopenbox.git merge r7464-65 from trunk --- diff --git a/openbox/client.c b/openbox/client.c index c3e7ae6c..634b5180 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -3986,6 +3986,11 @@ ObClient* client_under_pointer() if (WINDOW_IS_CLIENT(it->data)) { ObClient *c = WINDOW_AS_CLIENT(it->data); if (c->frame->visible && + /* check the desktop, this is done during desktop + switching and windows are shown/hidden status is not + reliable */ + (c->desktop == screen_desktop || + c->desktop == DESKTOP_ALL) && /* ignore all animating windows */ !frame_iconify_animating(c->frame) && RECT_CONTAINS(c->frame->area, x, y)) 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;