diff options
| author | Mikael Magnusson <mikachu@gmail.com> | 2013-04-23 22:29:58 +0200 |
|---|---|---|
| committer | Mikael Magnusson <mikachu@gmail.com> | 2013-06-07 08:40:52 +0200 |
| commit | 1b73a296464546f7dc58f2a753d13042a94337b0 (patch) | |
| tree | 429646308f78bb800d72323ad117ba22b350bd05 /openbox/popup.c | |
| parent | 8be9cc92b6daa87a5dcb854d5e0c34b3e4f98e59 (diff) | |
Constrain the moveresize popup to the monitor which has the client
Diffstat (limited to 'openbox/popup.c')
| -rw-r--r-- | openbox/popup.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/openbox/popup.c b/openbox/popup.c index 2a83d7b8..5ecf2fa5 100644 --- a/openbox/popup.c +++ b/openbox/popup.c @@ -250,16 +250,22 @@ void popup_delay_show(ObPopup *self, gulong msec, gchar *text) break; } - /* Find the monitor which contains the biggest part of the popup. - * If the popup is completely off screen, limit it to the intersection - * of all monitors and then try again. If it's still off screen, put it - * on monitor 0. */ - RECT_SET(mon, x, y, w, h); - m = screen_find_monitor(&mon); + /* If the popup belongs to a client (eg, the moveresize popup), get + * the monitor for that client, otherwise do other stuff */ + if (self->client) { + m = client_monitor(self->client); + } else { + /* Find the monitor which contains the biggest part of the popup. + * If the popup is completely off screen, limit it to the intersection + * of all monitors and then try again. If it's still off screen, put it + * on monitor 0. */ + RECT_SET(mon, x, y, w, h); + m = screen_find_monitor(&mon); + } area = screen_physical_area_monitor(m); - x=MAX(MIN(x, area->x+area->width-w),area->x); - y=MAX(MIN(y, area->y+area->height-h),area->y); + x = MAX(MIN(x, area->x+area->width-w), area->x); + y = MAX(MIN(y, area->y+area->height-h), area->y); if (m == screen_num_monitors) { RECT_SET(mon, x, y, w, h); @@ -268,8 +274,8 @@ void popup_delay_show(ObPopup *self, gulong msec, gchar *text) m = 0; area = screen_physical_area_monitor(m); - x=MAX(MIN(x, area->x+area->width-w),area->x); - y=MAX(MIN(y, area->y+area->height-h),area->y); + x = MAX(MIN(x, area->x+area->width-w), area->x); + y = MAX(MIN(y, area->y+area->height-h), area->y); } /* set the windows/appearances up */ |
