diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-05-06 22:57:49 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-05-06 22:57:49 +0000 |
| commit | 7ffa091d5b464ce508023c3b5e5bc50a36be53fb (patch) | |
| tree | 3cbd3840af488e4ef1de2caf0614047ef507e5c3 /openbox/place.c | |
| parent | 6cd5f7ea380e155dbd7b29f01dd3fcfb5858ad61 (diff) | |
change the perapp settings "head" option to "monitor" i think its easier to understand.
some cleanup for perapp settings.
make monitor and desktop be specified starting at 1, like elsewhere in the config file.
Diffstat (limited to 'openbox/place.c')
| -rw-r--r-- | openbox/place.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/openbox/place.c b/openbox/place.c index ac902d2d..f37973b3 100644 --- a/openbox/place.c +++ b/openbox/place.c @@ -52,6 +52,9 @@ static Rect *pick_pointer_head(ObClient *c) g_assert_not_reached(); } +/*! Pick a monitor to place a window on. + The returned array value should be freed with g_free. The areas within the + array should not be freed. */ static Rect **pick_head(ObClient *c) { Rect **area; @@ -388,16 +391,24 @@ static gboolean place_under_mouse(ObClient *client, gint *x, gint *y) static gboolean place_per_app_setting(ObClient *client, gint *x, gint *y, ObAppSettings *settings) { - Rect *screen; + Rect *screen = NULL; if (!settings || (settings && !settings->pos_given)) return FALSE; /* Find which head the pointer is on */ - if (settings->head == -1) + if (settings->monitor == 0) screen = pick_pointer_head(client); - else - screen = screen_area_monitor(client->desktop, settings->head); + else if (settings->monitor > 0 && + (guint)settings->monitor <= screen_num_monitors) + screen = screen_area_monitor(client->desktop, + (guint)settings->monitor - 1); + else { + Rect **all = NULL; + all = pick_head(client); + screen = all[0]; + g_free(all); /* the areas themselves don't need to be freed */ + } if (settings->center_x) *x = screen->x + screen->width / 2 - client->area.width / 2; |
