Try to fix the popup only showing up on monitor 0.

screen_find_monitor() should perhaps contain that big hunk of logic, I don't know if
anything will break now that it returns screen_num_monitors sometimes. We'll see!
This commit is contained in:
Mikael Magnusson 2007-10-31 08:10:51 +01:00
parent 70689e1093
commit dc6564619f
2 changed files with 23 additions and 6 deletions

View file

@ -151,14 +151,12 @@ void popup_delay_show(ObPopup *self, gulong usec, gchar *text)
{ {
gint l, t, r, b; gint l, t, r, b;
gint x, y, w, h; gint x, y, w, h;
guint m;
gint emptyx, emptyy; /* empty space between elements */ gint emptyx, emptyy; /* empty space between elements */
gint textx, texty, textw, texth; gint textx, texty, textw, texth;
gint iconx, icony, iconw, iconh; gint iconx, icony, iconw, iconh;
Rect *area, mon; Rect *area, mon;
RECT_SET(mon, self->x, self->y, 1, 1);
area = screen_physical_area_monitor(screen_find_monitor(&mon));
/* when there is no icon and the text is not parent relative, then /* when there is no icon and the text is not parent relative, then
fill the whole dialog with the text appearance, don't use the bg at all fill the whole dialog with the text appearance, don't use the bg at all
*/ */
@ -246,8 +244,27 @@ void popup_delay_show(ObPopup *self, gulong usec, gchar *text)
break; break;
} }
x=MAX(MIN(x, area->width-w),0); /* Find the monitor which contains the biggest part of the popup.
y=MAX(MIN(y, area->height-h),0); * 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);
if (m == screen_num_monitors) {
RECT_SET(mon, x, y, w, h);
m = screen_find_monitor(&mon);
if (m == screen_num_monitors)
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);
}
/* set the windows/appearances up */ /* set the windows/appearances up */
XMoveResizeWindow(ob_display, self->bg, x, y, w, h); XMoveResizeWindow(ob_display, self->bg, x, y, w, h);

View file

@ -1510,7 +1510,7 @@ Rect* screen_area(guint desktop, guint head, Rect *search)
guint screen_find_monitor(Rect *search) guint screen_find_monitor(Rect *search)
{ {
guint i; guint i;
guint most = 0; guint most = screen_num_monitors;
guint mostv = 0; guint mostv = 0;
for (i = 0; i < screen_num_monitors; ++i) { for (i = 0; i < screen_num_monitors; ++i) {