summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-06-07 15:07:50 +0000
committerDana Jansens <danakj@orodu.net>2007-06-07 15:07:50 +0000
commit5579b28481a54d9df451e40854d86b927a64a2f4 (patch)
tree1bd07d2a6affe49e6a9fa892243473c3c149fffc
parent2b135c53565547779719348ec3164311be8191fe (diff)
make popup dialogs appear on the active monitor with xinerama
-rw-r--r--openbox/focus_cycle_popup.c5
-rw-r--r--openbox/keyboard.c4
-rw-r--r--openbox/screen.c20
-rw-r--r--openbox/screen.h2
4 files changed, 26 insertions, 5 deletions
diff --git a/openbox/focus_cycle_popup.c b/openbox/focus_cycle_popup.c
index b827e524..071ffc16 100644
--- a/openbox/focus_cycle_popup.c
+++ b/openbox/focus_cycle_popup.c
@@ -240,7 +240,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
gint ml, mt, mr, mb;
gint l, t, r, b;
gint x, y, w, h;
- Rect *screen_area;
+ Rect *screen_area = NULL;
gint icons_per_row;
gint icon_rows;
gint textx, texty, textw, texth;
@@ -252,8 +252,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
const ObFocusCyclePopupTarget *newtarget;
gint newtargetx, newtargety;
- /* XXX find the middle monitor? */
- screen_area = screen_physical_area_monitor(0);
+ screen_area = screen_physical_area_monitor_active();
/* get the outside margins */
RrMargins(p->a_bg, &ml, &mt, &mr, &mb);
diff --git a/openbox/keyboard.c b/openbox/keyboard.c
index 51f2cff9..06cd7525 100644
--- a/openbox/keyboard.c
+++ b/openbox/keyboard.c
@@ -87,6 +87,7 @@ static void set_curpos(KeyBindingTree *newpos)
if (curpos != NULL) {
gchar *text = NULL;
GList *it;
+ Rect *a;
for (it = curpos->keylist; it; it = g_list_next(it)) {
gchar *oldtext = text;
@@ -97,7 +98,8 @@ static void set_curpos(KeyBindingTree *newpos)
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 */
popup_delay_show(popup, G_USEC_PER_SEC, text);
g_free(text);
diff --git a/openbox/screen.c b/openbox/screen.c
index 9cfc1850..a9b045ff 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -731,7 +731,7 @@ void screen_desktop_popup(guint d, gboolean show)
if (!show) {
pager_popup_hide(desktop_cycle_popup);
} else {
- a = screen_physical_area_monitor(0);
+ a = screen_physical_area_monitor_active();
pager_popup_position(desktop_cycle_popup, CenterGravity,
a->x + a->width / 2, a->y + a->height / 2);
pager_popup_icon_size_multiplier(desktop_cycle_popup,
@@ -1365,6 +1365,24 @@ Rect *screen_physical_area_monitor(guint 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()
{
if (sn_app_starting())
diff --git a/openbox/screen.h b/openbox/screen.h
index b40776df..03d6ff69 100644
--- a/openbox/screen.h
+++ b/openbox/screen.h
@@ -98,6 +98,8 @@ Rect *screen_physical_area();
Rect *screen_physical_area_monitor(guint head);
+Rect *screen_physical_area_monitor_active();
+
Rect *screen_area(guint desktop);
Rect *screen_area_monitor(guint desktop, guint head);