mirror of
https://github.com/brl/mutter.git
synced 2025-01-23 09:59:03 +00:00
wayland/xdg-popup: Always use monitor of toplevel
Always use the monitor of the toplevel surface's window, so that the popup menu and the parent will always have the same scale. This fixes the dimensions sent in the xdg_popup configure event. https://bugzilla.gnome.org/show_bug.cgi?id=771841
This commit is contained in:
parent
0dfb5d3ef7
commit
c0c132a320
@ -1464,6 +1464,7 @@ xdg_surface_constructor_get_toplevel (struct wl_client *client,
|
|||||||
|
|
||||||
window = meta_window_wayland_new (meta_get_display (), surface);
|
window = meta_window_wayland_new (meta_get_display (), surface);
|
||||||
meta_wayland_surface_set_window (surface, window);
|
meta_wayland_surface_set_window (surface, window);
|
||||||
|
meta_window_update_monitor (window, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -334,19 +334,31 @@ scale_rect_size (MetaRectangle *rect,
|
|||||||
static void
|
static void
|
||||||
meta_window_wayland_update_main_monitor (MetaWindow *window)
|
meta_window_wayland_update_main_monitor (MetaWindow *window)
|
||||||
{
|
{
|
||||||
|
MetaWindow *toplevel_window;
|
||||||
const MetaMonitorInfo *from;
|
const MetaMonitorInfo *from;
|
||||||
const MetaMonitorInfo *to;
|
const MetaMonitorInfo *to;
|
||||||
const MetaMonitorInfo *scaled_new;
|
const MetaMonitorInfo *scaled_new;
|
||||||
float scale;
|
float scale;
|
||||||
MetaRectangle rect;
|
MetaRectangle rect;
|
||||||
|
|
||||||
/* Require both the current and the new monitor would be the new main monitor,
|
|
||||||
* even given the resulting scale the window would end up having. This is
|
|
||||||
* needed to avoid jumping back and forth between the new and the old, since
|
|
||||||
* changing main monitor may cause the window to be resized so that it no
|
|
||||||
* longer have that same new main monitor. */
|
|
||||||
from = window->monitor;
|
from = window->monitor;
|
||||||
to = meta_screen_calculate_monitor_for_window (window->screen, window);
|
|
||||||
|
/* If the window is not a toplevel window (i.e. it's a popup window) just use
|
||||||
|
* the monitor of the toplevel. */
|
||||||
|
toplevel_window = meta_wayland_surface_get_toplevel_window (window->surface);
|
||||||
|
if (toplevel_window != window)
|
||||||
|
{
|
||||||
|
to = toplevel_window->monitor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Require both the current and the new monitor would be the new main monitor,
|
||||||
|
* even given the resulting scale the window would end up having. This is
|
||||||
|
* needed to avoid jumping back and forth between the new and the old, since
|
||||||
|
* changing main monitor may cause the window to be resized so that it no
|
||||||
|
* longer have that same new main monitor. */
|
||||||
|
to = meta_screen_calculate_monitor_for_window (window->screen, window);
|
||||||
|
}
|
||||||
|
|
||||||
if (from == to)
|
if (from == to)
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user