mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 17:40:40 -05:00
Add and export meta_window_move_to_monitor
This is useful for DnD to another monitor in gnome-shell. In addition to a normal move it corrects the saved rect for maximized and fullscreened windows. https://bugzilla.gnome.org/show_bug.cgi?id=645032
This commit is contained in:
parent
b1725bc18c
commit
c5d1d2db62
@ -4776,6 +4776,49 @@ meta_window_move_frame (MetaWindow *window,
|
|||||||
meta_window_move (window, user_op, x, y);
|
meta_window_move (window, user_op, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* meta_window_move_to_monitor:
|
||||||
|
* @window: a #MetaWindow
|
||||||
|
* @monitor: desired monitor index
|
||||||
|
*
|
||||||
|
* Moves the window to the monitor with index @monitor, keeping
|
||||||
|
* the relative position of the window's top left corner.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
meta_window_move_to_monitor (MetaWindow *window,
|
||||||
|
int monitor)
|
||||||
|
{
|
||||||
|
MetaRectangle old_area, new_area;
|
||||||
|
int rel_x, rel_y;
|
||||||
|
double scale_x, scale_y;
|
||||||
|
|
||||||
|
if (monitor == window->monitor->number)
|
||||||
|
return;
|
||||||
|
|
||||||
|
meta_window_get_work_area_for_monitor (window,
|
||||||
|
window->monitor->number,
|
||||||
|
&old_area);
|
||||||
|
meta_window_get_work_area_for_monitor (window,
|
||||||
|
monitor,
|
||||||
|
&new_area);
|
||||||
|
|
||||||
|
rel_x = window->user_rect.x - old_area.x;
|
||||||
|
rel_y = window->user_rect.y - old_area.y;
|
||||||
|
scale_x = (double)new_area.width / old_area.width;
|
||||||
|
scale_y = (double)new_area.height / old_area.height;
|
||||||
|
|
||||||
|
window->user_rect.x = new_area.x + rel_x * scale_x;
|
||||||
|
window->user_rect.y = new_area.y + rel_y * scale_y;
|
||||||
|
window->saved_rect.x = window->user_rect.x;
|
||||||
|
window->saved_rect.y = window->user_rect.y;
|
||||||
|
|
||||||
|
meta_window_move_resize (window, FALSE,
|
||||||
|
window->user_rect.x,
|
||||||
|
window->user_rect.y,
|
||||||
|
window->user_rect.width,
|
||||||
|
window->user_rect.height);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_window_move_resize (MetaWindow *window,
|
meta_window_move_resize (MetaWindow *window,
|
||||||
gboolean user_op,
|
gboolean user_op,
|
||||||
|
@ -95,6 +95,7 @@ gboolean meta_window_showing_on_its_workspace (MetaWindow *window);
|
|||||||
|
|
||||||
void meta_window_move(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);
|
void meta_window_move(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);
|
||||||
void meta_window_move_frame(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);
|
void meta_window_move_frame(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);
|
||||||
|
void meta_window_move_to_monitor (MetaWindow *window, int monitor);
|
||||||
void meta_window_resize(MetaWindow *window, gboolean user_op, int w, int h);
|
void meta_window_resize(MetaWindow *window, gboolean user_op, int w, int h);
|
||||||
|
|
||||||
void meta_window_set_demands_attention (MetaWindow *window);
|
void meta_window_set_demands_attention (MetaWindow *window);
|
||||||
|
Loading…
Reference in New Issue
Block a user