make popup dialogs appear on the active monitor with xinerama

This commit is contained in:
Dana Jansens 2007-06-07 15:07:50 +00:00
parent 2b135c5356
commit 5579b28481
4 changed files with 26 additions and 5 deletions

View file

@ -240,7 +240,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
gint ml, mt, mr, mb; gint ml, mt, mr, mb;
gint l, t, r, b; gint l, t, r, b;
gint x, y, w, h; gint x, y, w, h;
Rect *screen_area; Rect *screen_area = NULL;
gint icons_per_row; gint icons_per_row;
gint icon_rows; gint icon_rows;
gint textx, texty, textw, texth; gint textx, texty, textw, texth;
@ -252,8 +252,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
const ObFocusCyclePopupTarget *newtarget; const ObFocusCyclePopupTarget *newtarget;
gint newtargetx, newtargety; gint newtargetx, newtargety;
/* XXX find the middle monitor? */ screen_area = screen_physical_area_monitor_active();
screen_area = screen_physical_area_monitor(0);
/* get the outside margins */ /* get the outside margins */
RrMargins(p->a_bg, &ml, &mt, &mr, &mb); RrMargins(p->a_bg, &ml, &mt, &mr, &mb);

View file

@ -87,6 +87,7 @@ static void set_curpos(KeyBindingTree *newpos)
if (curpos != NULL) { if (curpos != NULL) {
gchar *text = NULL; gchar *text = NULL;
GList *it; GList *it;
Rect *a;
for (it = curpos->keylist; it; it = g_list_next(it)) { for (it = curpos->keylist; it; it = g_list_next(it)) {
gchar *oldtext = text; gchar *oldtext = text;
@ -97,7 +98,8 @@ static void set_curpos(KeyBindingTree *newpos)
g_free(oldtext); g_free(oldtext);
} }
popup_position(popup, NorthWestGravity, 10, 10); a = screen_physical_area_monitor_active();
popup_position(popup, NorthWestGravity, a->x + 10, a->y + 10);
/* 1 second delay for the popup to show */ /* 1 second delay for the popup to show */
popup_delay_show(popup, G_USEC_PER_SEC, text); popup_delay_show(popup, G_USEC_PER_SEC, text);
g_free(text); g_free(text);

View file

@ -731,7 +731,7 @@ void screen_desktop_popup(guint d, gboolean show)
if (!show) { if (!show) {
pager_popup_hide(desktop_cycle_popup); pager_popup_hide(desktop_cycle_popup);
} else { } else {
a = screen_physical_area_monitor(0); a = screen_physical_area_monitor_active();
pager_popup_position(desktop_cycle_popup, CenterGravity, pager_popup_position(desktop_cycle_popup, CenterGravity,
a->x + a->width / 2, a->y + a->height / 2); a->x + a->width / 2, a->y + a->height / 2);
pager_popup_icon_size_multiplier(desktop_cycle_popup, pager_popup_icon_size_multiplier(desktop_cycle_popup,
@ -1365,6 +1365,24 @@ Rect *screen_physical_area_monitor(guint head)
return &monitor_area[head]; return &monitor_area[head];
} }
Rect *screen_physical_area_monitor_active()
{
Rect *a;
gint x, y;
if (focus_client)
a = screen_physical_area_monitor(client_monitor(focus_client));
else {
Rect mon;
if (screen_pointer_pos(&x, &y))
RECT_SET(mon, x, y, 1, 1);
else
RECT_SET(mon, 0, 0, 1, 1);
a = screen_physical_area_monitor(screen_find_monitor(&mon));
}
return a;
}
void screen_set_root_cursor() void screen_set_root_cursor()
{ {
if (sn_app_starting()) if (sn_app_starting())

View file

@ -98,6 +98,8 @@ Rect *screen_physical_area();
Rect *screen_physical_area_monitor(guint head); Rect *screen_physical_area_monitor(guint head);
Rect *screen_physical_area_monitor_active();
Rect *screen_area(guint desktop); Rect *screen_area(guint desktop);
Rect *screen_area_monitor(guint desktop, guint head); Rect *screen_area_monitor(guint desktop, guint head);