diff options
author | Omar Zeidan <[email protected]> | 2017-12-30 10:20:48 +0100 |
---|---|---|
committer | raveit65 <[email protected]> | 2018-01-15 17:29:48 +0100 |
commit | dc894ffdd14a61d934af625af10fb384e89ef375 (patch) | |
tree | 50ff4eeb930eff53e25ea4698d744b1957e06ae1 | |
parent | fc79bd1c4af4bce121a313cc2777b414c838a73c (diff) | |
download | marco-dc894ffdd14a61d934af625af10fb384e89ef375.tar.bz2 marco-dc894ffdd14a61d934af625af10fb384e89ef375.tar.xz |
Bugfix for monitors of different sizes
-rw-r--r-- | src/core/window.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/core/window.c b/src/core/window.c index b5f9468c..3f6314d6 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -114,7 +114,7 @@ static MetaTileMode calculate_tiling_mode(int x, MetaRectangle work_area, int shake_threshold); -static void meta_window_rescale_to_monitor (MetaRectangle *target_rect, +static void meta_window_transform_to_monitor (MetaRectangle *target_rect, const MetaRectangle *from_monitor, const MetaRectangle *to_monitor); @@ -2877,15 +2877,23 @@ meta_window_move_to_monitor(MetaWindow *window, if(META_WINDOW_TILED (window)) { window->tile_monitor_number = to_monitor->number; - meta_window_rescale_to_monitor(&window->saved_rect, + + /* Transform user_rect and saved_rect to the other monitor */ + meta_window_transform_to_monitor(&window->saved_rect, + &from_monitor->rect, + &to_monitor->rect); + meta_window_transform_to_monitor(&window->user_rect, &from_monitor->rect, &to_monitor->rect); + meta_window_tile(window); return; } - + + /* Normally, just transform the window itself */ meta_window_get_client_root_coords(window, &target_rect); - meta_window_rescale_to_monitor(&target_rect, + + meta_window_transform_to_monitor(&target_rect, &from_monitor->rect, &to_monitor->rect); @@ -2896,27 +2904,27 @@ meta_window_move_to_monitor(MetaWindow *window, target_rect.height); } -static void meta_window_rescale_to_monitor(MetaRectangle *target_rect, +static void meta_window_transform_to_monitor(MetaRectangle *target_rect, const MetaRectangle *from_monitor, const MetaRectangle *to_monitor) { double horizontal_ratio; double vertical_ratio; - target_rect->x += to_monitor->x - from_monitor->x; - target_rect->y += to_monitor->y - from_monitor->y; - - if(from_monitor->width == to_monitor->width && - from_monitor->height == to_monitor->height) - return; - horizontal_ratio = (double)to_monitor->width / from_monitor->width; vertical_ratio = (double)to_monitor->height / from_monitor->height; + target_rect->x -= from_monitor->x; + target_rect->y -= from_monitor->y; + target_rect->width *= horizontal_ratio; target_rect->height *= vertical_ratio; target_rect->x *= horizontal_ratio; target_rect->y *= vertical_ratio; + + target_rect->x += to_monitor->x; + target_rect->y += to_monitor->y; + } |