mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
display: Make sure to retrieve the toplevel transient for
If we have multiple modal stacked dialogs, move the top one, not the immediate parent, which heavily confuses mutter.
This commit is contained in:
parent
7cefe91c3c
commit
6e8d1d79d1
@ -1715,6 +1715,18 @@ meta_display_set_grab_op_cursor (MetaDisplay *display,
|
||||
display->grab_have_pointer = TRUE;
|
||||
}
|
||||
|
||||
static MetaWindow *
|
||||
get_toplevel_transient_for (MetaWindow *window)
|
||||
{
|
||||
while (TRUE)
|
||||
{
|
||||
MetaWindow *parent = meta_window_get_transient_for (window);
|
||||
if (parent == NULL)
|
||||
return window;
|
||||
window = parent;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_display_begin_grab_op (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
@ -1757,15 +1769,13 @@ meta_display_begin_grab_op (MetaDisplay *display,
|
||||
}
|
||||
}
|
||||
|
||||
grab_window = window;
|
||||
|
||||
/* If window is a modal dialog attached to its parent,
|
||||
* grab the parent instead for moving.
|
||||
*/
|
||||
if (window && meta_window_is_attached_dialog (window) &&
|
||||
meta_grab_op_is_moving (op))
|
||||
grab_window = meta_window_get_transient_for (window);
|
||||
|
||||
if (grab_window == NULL)
|
||||
grab_window = window;
|
||||
if (meta_grab_op_is_moving (op))
|
||||
grab_window = get_toplevel_transient_for (window);
|
||||
|
||||
g_assert (grab_window != NULL);
|
||||
g_assert (op != META_GRAB_OP_NONE);
|
||||
|
Loading…
Reference in New Issue
Block a user