stacking_raise(INTERNAL_AS_WINDOW(self));
self->mapped = TRUE;
self->delay_mapped = FALSE;
+ self->delay_timer = 0;
return FALSE; /* don't repeat */
}
-void popup_delay_show(ObPopup *self, gulong usec, gchar *text)
+void popup_delay_show(ObPopup *self, gulong msec, gchar *text)
{
gint l, t, r, b;
gint x, y, w, h;
textx += iconw + ob_rr_theme->paddingx;
if (textw)
emptyx += ob_rr_theme->paddingx; /* between the icon and text */
+ icony = (h - iconh - emptyy) / 2 + t + ob_rr_theme->paddingy;
} else
iconw = 0;
texty = (h - texth - emptyy) / 2 + t + ob_rr_theme->paddingy;
- icony = (h - iconh - emptyy) / 2 + t + ob_rr_theme->paddingy;
/* when there is no icon, then fill the whole dialog with the text
appearance
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);
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 */
/* do the actual showing */
if (!self->mapped) {
- if (usec) {
+ if (msec) {
/* don't kill previous show timers */
if (!self->delay_mapped) {
- obt_main_loop_timeout_add(ob_main_loop, usec,
- popup_show_timeout, self,
- g_direct_equal, NULL);
+ self->delay_timer =
+ g_timeout_add(msec, popup_show_timeout, self);
self->delay_mapped = TRUE;
}
} else {
event_end_ignore_all_enters(ignore_start);
} else if (self->delay_mapped) {
- obt_main_loop_timeout_remove_data(ob_main_loop, popup_show_timeout, self, FALSE);
+ g_source_remove(self->delay_timer);
+ self->delay_timer = 0;
self->delay_mapped = FALSE;
}
}
}
}
-void icon_popup_delay_show(ObIconPopup *self, gulong usec,
+void icon_popup_delay_show(ObIconPopup *self, gulong msec,
gchar *text, RrImage *icon)
{
if (icon) {
self->a_icon->texture[0].type = RR_TEXTURE_NONE;
}
- popup_delay_show(self->popup, usec, text);
+ popup_delay_show(self->popup, msec, text);
}
void icon_popup_icon_size_multiplier(ObIconPopup *self, guint wm, guint hm)
}
}
-void pager_popup_delay_show(ObPagerPopup *self, gulong usec,
+void pager_popup_delay_show(ObPagerPopup *self, gulong msec,
gchar *text, guint desk)
{
guint i;
self->desks = screen_num_desktops;
self->curdesk = desk;
- popup_delay_show(self->popup, usec, text);
+ popup_delay_show(self->popup, msec, text);
}
void pager_popup_icon_size_multiplier(ObPagerPopup *self, guint wm, guint hm)