summaryrefslogtreecommitdiff
path: root/src/core/place.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/place.c')
-rw-r--r--src/core/place.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/core/place.c b/src/core/place.c
index fcb2f69cd..ec28c11f8 100644
--- a/src/core/place.c
+++ b/src/core/place.c
@@ -354,10 +354,17 @@ avoid_being_obscured_as_second_modal_dialog (MetaWindow *window,
* know about the modal-to-the-main-window part.
*/
- MetaWindow *focus_window;
+ MetaWindow *focus_window = NULL;
+ MetaFocusInfo *focus_info;
MetaRectangle overlap;
+ MetaDevice *pointer, *keyboard;
- focus_window = window->display->focus_window;
+ pointer = meta_window_guess_grab_pointer (window);
+ keyboard = meta_device_get_paired_device (pointer);
+ focus_info = meta_display_get_focus_info (window->display, keyboard);
+
+ if (focus_window)
+ focus_window = focus_info->focus_window;
if (window->denied_focus_and_not_transient &&
window->wm_state_modal && /* FIXME: Maybe do this for all transients? */
@@ -913,8 +920,16 @@ meta_window_place (MetaWindow *window,
gboolean found_fit;
MetaWindow *focus_window;
MetaRectangle overlap;
+ MetaDevice *pointer, *keyboard;
+ MetaFocusInfo *focus_info;
+
+ pointer = meta_window_guess_grab_pointer (window);
+ keyboard = meta_device_get_paired_device (pointer);
+
+ focus_info = meta_display_get_focus_info (window->display, keyboard);
+ g_assert (focus_info != NULL);
- focus_window = window->display->focus_window;
+ focus_window = focus_info->focus_window;
g_assert (focus_window != NULL);
/* No need to do anything if the window doesn't overlap at all */