diff options
| author | Dana Jansens <danakj@orodu.net> | 2009-12-14 16:08:30 -0500 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2009-12-14 16:08:30 -0500 |
| commit | 111465b7373cdcdd791b603aefd882ae06d5bf0b (patch) | |
| tree | bf62f6a4c64cfb9162b9765611a9f56e363b17a3 /openbox/menuframe.c | |
| parent | d55f4b41c6ebf00e36a5e91ddc962a753f6c9ef8 (diff) | |
Let menus place themselves on monitors where the mouse is not present
This fixes a bug which forced menus to show up on the same monitor as the
mouse pointer.
Diffstat (limited to 'openbox/menuframe.c')
| -rw-r--r-- | openbox/menuframe.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/openbox/menuframe.c b/openbox/menuframe.c index a9b54408..3b53a63e 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -192,6 +192,7 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self) void menu_frame_move(ObMenuFrame *self, gint x, gint y) { RECT_SET_POINT(self->area, x, y); + self->monitor = screen_find_monitor_point(x, y); XMoveWindow(ob_display, self->window, self->area.x, self->area.y); } @@ -294,7 +295,7 @@ void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y, *dx = *dy = 0; - a = screen_physical_area_monitor(self->monitor); + a = screen_physical_area_monitor(screen_find_monitor_point(x, y)); half = g_list_length(self->entries) / 2; pos = g_list_index(self->entries, self->selected); @@ -953,17 +954,6 @@ gboolean menu_frame_show_topmenu(ObMenuFrame *self, gint x, gint y, if (!menu_frame_show(self)) return FALSE; - /* find the monitor the menu is on */ - for (i = 0; i < screen_num_monitors; ++i) { - Rect *a = screen_physical_area_monitor(i); - gboolean contains = RECT_CONTAINS(*a, x, y); - g_free(a); - if (contains) { - self->monitor = i; - break; - } - } - if (self->menu->place_func) self->menu->place_func(self, &x, &y, mouse, self->menu->data); else |
