diff options
author | Omar Zeidan <[email protected]> | 2017-12-30 06:45:08 +0100 |
---|---|---|
committer | raveit65 <[email protected]> | 2018-01-15 17:29:48 +0100 |
commit | fc79bd1c4af4bce121a313cc2777b414c838a73c (patch) | |
tree | 8400f3cebd8785dde10cbba9f1c0b5b2392f77d7 /src/core/window.c | |
parent | 7e14f82c4b5e3137bbdc3a4e55dbfe01e5af28c0 (diff) | |
download | marco-fc79bd1c4af4bce121a313cc2777b414c838a73c.tar.bz2 marco-fc79bd1c4af4bce121a313cc2777b414c838a73c.tar.xz |
Restructured monitor keybinds and adjust save_rect
Diffstat (limited to 'src/core/window.c')
-rw-r--r-- | src/core/window.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/core/window.c b/src/core/window.c index a1e38d3f..b5f9468c 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -114,6 +114,9 @@ static MetaTileMode calculate_tiling_mode(int x, MetaRectangle work_area, int shake_threshold); +static void meta_window_rescale_to_monitor (MetaRectangle *target_rect, + const MetaRectangle *from_monitor, + const MetaRectangle *to_monitor); static gboolean update_resize_timeout (gpointer data); @@ -2863,6 +2866,61 @@ meta_window_unmaximize (MetaWindow *window, meta_compositor_unmaximize_window (window->display->compositor, window); } + +void +meta_window_move_to_monitor(MetaWindow *window, + const MetaXineramaScreenInfo *from_monitor, + const MetaXineramaScreenInfo *to_monitor) +{ + MetaRectangle target_rect; + + if(META_WINDOW_TILED (window)) + { + window->tile_monitor_number = to_monitor->number; + meta_window_rescale_to_monitor(&window->saved_rect, + &from_monitor->rect, + &to_monitor->rect); + meta_window_tile(window); + return; + } + + meta_window_get_client_root_coords(window, &target_rect); + meta_window_rescale_to_monitor(&target_rect, + &from_monitor->rect, + &to_monitor->rect); + + meta_window_move_resize(window, TRUE, + target_rect.x, + target_rect.y, + target_rect.width, + target_rect.height); +} + +static void meta_window_rescale_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->width *= horizontal_ratio; + target_rect->height *= vertical_ratio; + target_rect->x *= horizontal_ratio; + target_rect->y *= vertical_ratio; +} + + + void meta_window_make_above (MetaWindow *window) { |