[mutter] edge-tiling: Fix cancelling maximize tiling
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] edge-tiling: Fix cancelling maximize tiling
- Date: Mon, 25 Apr 2011 21:13:31 +0000 (UTC)
commit 3543782f392bad5b2ded0077490f154e4b47c1e8
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Mar 29 20:11:07 2011 +0200
edge-tiling: Fix cancelling maximize tiling
If a window can not be tiled, e.g. due to its minimum size hints,
dragging away from the top after activating the maximize tile preview
does not cancel the maximization request, the only way to do so is by
hitting Escape.
To fix, reset the tiling state in the maximize-tile code path as
well if necessary.
https://bugzilla.gnome.org/show_bug.cgi?id=646149
src/core/window.c | 56 ++++++++++++++++++++++------------------------------
1 files changed, 24 insertions(+), 32 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index a48b0c1..d442932 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -8203,50 +8203,42 @@ update_move (MetaWindow *window,
shake_threshold = meta_ui_get_drag_threshold (window->screen->ui) *
DRAG_THRESHOLD_TO_SHAKE_THRESHOLD_FACTOR;
- if (meta_prefs_get_edge_tiling ())
+ if (meta_prefs_get_edge_tiling () &&
+ !META_WINDOW_MAXIMIZED (window) &&
+ !META_WINDOW_TILED_SIDE_BY_SIDE (window))
{
const MetaMonitorInfo *monitor;
MetaRectangle work_area;
/* For side-by-side tiling we are interested in the inside vertical
- * edges of the work area of the monitor where the pointer is located.
- * Also see comment in meta_window_get_current_tile_area()
+ * edges of the work area of the monitor where the pointer is located,
+ * and in the outside top edge for maximized tiling.
+ * Also see comment in meta_window_get_current_tile_area().
+ *
+ * For maximized tiling we use the outside edge instead of the
+ * inside edge, because we don't want to force users to maximize
+ * windows they are placing near the top of their screens.
*/
monitor = meta_screen_get_current_monitor (window->screen);
meta_window_get_work_area_for_monitor (window,
monitor->number,
&work_area);
- if (meta_window_can_tile_side_by_side (window))
- {
- /* check if cursor is near an edge of the work area */
- if (x >= monitor->rect.x && x < (work_area.x + shake_threshold))
- window->tile_mode = META_TILE_LEFT;
- else if (x >= work_area.x + work_area.width - shake_threshold &&
- x < (monitor->rect.x + monitor->rect.width))
- window->tile_mode = META_TILE_RIGHT;
- else
- window->tile_mode = META_TILE_NONE;
- }
-
- /* For maximized tiling we are interested in the outside top edge
- * of the work area of the monitor where the pointer is located.
- *
- * We use the outside edge instead of the inside edge, because we
- * don't want to force users to maximize windows they are placing
- * near the top of their screens.
- *
- * If window->tile_mode is not NONE, that means that either we are
- * on an edge and set it above, or we are currently tiled (in
- * which case meta_window_can_tile_side_by_side() and
- * meta_window_can_tile_maximized() return FALSE).
+ /* Check if the cursor is in a position which triggers tiling
+ * and set tile_mode accordingly.
*/
- if (window->tile_mode == META_TILE_NONE && meta_window_can_tile_maximized (window))
- {
- /* check if cursor is on the top edge of the monitor*/
- if (y >= monitor->rect.y && y <= work_area.y)
- window->tile_mode = META_TILE_MAXIMIZED;
- }
+ if (meta_window_can_tile_side_by_side (window) &&
+ x >= monitor->rect.x && x < (work_area.x + shake_threshold))
+ window->tile_mode = META_TILE_LEFT;
+ else if (meta_window_can_tile_side_by_side (window) &&
+ x >= work_area.x + work_area.width - shake_threshold &&
+ x < (monitor->rect.x + monitor->rect.width))
+ window->tile_mode = META_TILE_RIGHT;
+ else if (meta_window_can_tile_maximized (window) &&
+ y >= monitor->rect.y && y <= work_area.y)
+ window->tile_mode = META_TILE_MAXIMIZED;
+ else
+ window->tile_mode = META_TILE_NONE;
}
/* shake loose (unmaximize) maximized or tiled window if dragged beyond
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]