mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
window: Implement tiling/maximizing through touch events
If during a multitouch drag, the area height is 1.5x the original size, the window is tiled to the closest side the hotspot is on (left/right). If both with/height are 1.5x the original, the window is maximized.
This commit is contained in:
parent
15186016c2
commit
141a353a52
@ -417,6 +417,10 @@ struct _MetaWindow
|
|||||||
MetaFocusInfo *cur_focus;
|
MetaFocusInfo *cur_focus;
|
||||||
|
|
||||||
GHashTable *cur_touches;
|
GHashTable *cur_touches;
|
||||||
|
gdouble initial_touch_area_width;
|
||||||
|
gdouble initial_touch_area_height;
|
||||||
|
gdouble cur_touch_area_width;
|
||||||
|
gdouble cur_touch_area_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _MetaWindowClass
|
struct _MetaWindowClass
|
||||||
|
@ -8658,6 +8658,27 @@ update_move (MetaWindow *window,
|
|||||||
else if (meta_window_can_tile_maximized (window) &&
|
else if (meta_window_can_tile_maximized (window) &&
|
||||||
y >= monitor->rect.y && y <= work_area.y)
|
y >= monitor->rect.y && y <= work_area.y)
|
||||||
window->tile_mode = META_TILE_MAXIMIZED;
|
window->tile_mode = META_TILE_MAXIMIZED;
|
||||||
|
else if (window->cur_touches &&
|
||||||
|
g_hash_table_size (window->cur_touches) == 3)
|
||||||
|
{
|
||||||
|
window->tile_mode = META_TILE_NONE;
|
||||||
|
|
||||||
|
if (window->cur_touch_area_height >
|
||||||
|
window->initial_touch_area_height * 1.5)
|
||||||
|
{
|
||||||
|
if (window->cur_touch_area_width >
|
||||||
|
window->initial_touch_area_width * 1.5 &&
|
||||||
|
meta_window_can_tile_maximized (window))
|
||||||
|
window->tile_mode = META_TILE_MAXIMIZED;
|
||||||
|
else if (meta_window_can_tile_side_by_side (window, device))
|
||||||
|
{
|
||||||
|
if (x < (monitor->rect.x + (monitor->rect.width / 2)))
|
||||||
|
window->tile_mode = META_TILE_LEFT;
|
||||||
|
else
|
||||||
|
window->tile_mode = META_TILE_RIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
window->tile_mode = META_TILE_NONE;
|
window->tile_mode = META_TILE_NONE;
|
||||||
|
|
||||||
@ -11003,6 +11024,11 @@ meta_window_end_touch (MetaWindow *window,
|
|||||||
|
|
||||||
n_touches = g_hash_table_size (window->cur_touches);
|
n_touches = g_hash_table_size (window->cur_touches);
|
||||||
|
|
||||||
|
window->initial_touch_area_width = 0;
|
||||||
|
window->initial_touch_area_height = 0;
|
||||||
|
window->cur_touch_area_width = 0;
|
||||||
|
window->cur_touch_area_height = 0;
|
||||||
|
|
||||||
if (n_touches == 2)
|
if (n_touches == 2)
|
||||||
{
|
{
|
||||||
MetaDevice *device;
|
MetaDevice *device;
|
||||||
@ -11010,4 +11036,10 @@ meta_window_end_touch (MetaWindow *window,
|
|||||||
device = meta_input_event_get_device (window->display, event);
|
device = meta_input_event_get_device (window->display, event);
|
||||||
meta_display_end_grab_op (window->display, device, evtime);
|
meta_display_end_grab_op (window->display, device, evtime);
|
||||||
}
|
}
|
||||||
|
else if (n_touches == 0 &&
|
||||||
|
window->tile_mode != META_TILE_NONE)
|
||||||
|
{
|
||||||
|
meta_window_tile (window);
|
||||||
|
update_tile_mode (window);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user