[mutter] window: Move meta_window_move_resize_request to window-x11
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Move meta_window_move_resize_request to window-x11
- Date: Tue, 29 Apr 2014 21:58:35 +0000 (UTC)
commit f2328f1105a6d922ea7e105583036e0a199e0f4a
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Tue Apr 29 15:15:42 2014 -0400
window: Move meta_window_move_resize_request to window-x11
src/core/window-private.h | 7 --
src/core/window.c | 165 ---------------------------------------------
src/x11/window-x11.c | 165 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 165 insertions(+), 172 deletions(-)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 798d76c..aaf62bc 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -612,13 +612,6 @@ void meta_window_get_geometry (MetaWindow *window,
void meta_window_update_unfocused_button_grabs (MetaWindow *window);
-void meta_window_move_resize_request(MetaWindow *window,
- guint value_mask,
- int gravity,
- int x,
- int y,
- int width,
- int height);
void meta_window_set_focused_internal (MetaWindow *window,
gboolean focused);
diff --git a/src/core/window.c b/src/core/window.c
index 1cdf6bf..7fb02de 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -5305,171 +5305,6 @@ meta_window_lower (MetaWindow *window)
meta_stack_lower (window->screen->stack, window);
}
-void
-meta_window_move_resize_request (MetaWindow *window,
- guint value_mask,
- int gravity,
- int new_x,
- int new_y,
- int new_width,
- int new_height)
-{
- int x, y, width, height;
- gboolean allow_position_change;
- gboolean in_grab_op;
- MetaMoveResizeFlags flags;
-
- /* We ignore configure requests while the user is moving/resizing
- * the window, since these represent the app sucking and fighting
- * the user, most likely due to a bug in the app (e.g. pfaedit
- * seemed to do this)
- *
- * Still have to do the ConfigureNotify and all, but pretend the
- * app asked for the current size/position instead of the new one.
- */
- in_grab_op = FALSE;
- if (window->display->grab_op != META_GRAB_OP_NONE &&
- window == window->display->grab_window)
- {
- switch (window->display->grab_op)
- {
- case META_GRAB_OP_MOVING:
- case META_GRAB_OP_RESIZING_SE:
- case META_GRAB_OP_RESIZING_S:
- case META_GRAB_OP_RESIZING_SW:
- case META_GRAB_OP_RESIZING_N:
- case META_GRAB_OP_RESIZING_NE:
- case META_GRAB_OP_RESIZING_NW:
- case META_GRAB_OP_RESIZING_W:
- case META_GRAB_OP_RESIZING_E:
- in_grab_op = TRUE;
- break;
- default:
- break;
- }
- }
-
- /* it's essential to use only the explicitly-set fields,
- * and otherwise use our current up-to-date position.
- *
- * Otherwise you get spurious position changes when the app changes
- * size, for example, if window->rect is not in sync with the
- * server-side position in effect when the configure request was
- * generated.
- */
- meta_window_get_gravity_position (window,
- gravity,
- &x, &y);
-
- allow_position_change = FALSE;
-
- if (meta_prefs_get_disable_workarounds ())
- {
- if (window->type == META_WINDOW_DIALOG ||
- window->type == META_WINDOW_MODAL_DIALOG ||
- window->type == META_WINDOW_SPLASHSCREEN)
- ; /* No position change for these */
- else if ((window->size_hints.flags & PPosition) ||
- /* USPosition is just stale if window is placed;
- * no --geometry involved here.
- */
- ((window->size_hints.flags & USPosition) &&
- !window->placed))
- allow_position_change = TRUE;
- }
- else
- {
- allow_position_change = TRUE;
- }
-
- if (in_grab_op)
- allow_position_change = FALSE;
-
- if (allow_position_change)
- {
- if (value_mask & CWX)
- x = new_x;
- if (value_mask & CWY)
- y = new_y;
- if (value_mask & (CWX | CWY))
- {
- /* Once manually positioned, windows shouldn't be placed
- * by the window manager.
- */
- window->placed = TRUE;
- }
- }
- else
- {
- meta_topic (META_DEBUG_GEOMETRY,
- "Not allowing position change for window %s PPosition 0x%lx USPosition 0x%lx type %u\n",
- window->desc, window->size_hints.flags & PPosition,
- window->size_hints.flags & USPosition,
- window->type);
- }
-
- width = window->rect.width;
- height = window->rect.height;
- if (!in_grab_op)
- {
- if (value_mask & CWWidth)
- width = new_width;
-
- if (value_mask & CWHeight)
- height = new_height;
- }
-
- /* ICCCM 4.1.5 */
-
- /* We're ignoring the value_mask here, since sizes
- * not in the mask will be the current window geometry.
- */
- window->size_hints.x = x;
- window->size_hints.y = y;
- window->size_hints.width = width;
- window->size_hints.height = height;
-
- /* NOTE: We consider ConfigureRequests to be "user" actions in one
- * way, but not in another. Explanation of the two cases are in the
- * next two big comments.
- */
-
- /* The constraints code allows user actions to move windows
- * offscreen, etc., and configure request actions would often send
- * windows offscreen when users don't want it if not constrained
- * (e.g. hitting a dropdown triangle in a fileselector to show more
- * options, which makes the window bigger). Thus we do not set
- * META_IS_USER_ACTION in flags to the
- * meta_window_move_resize_internal() call.
- */
- flags = META_IS_CONFIGURE_REQUEST;
- if (value_mask & (CWX | CWY))
- flags |= META_IS_MOVE_ACTION;
- if (value_mask & (CWWidth | CWHeight))
- flags |= META_IS_RESIZE_ACTION;
-
- if (flags & (META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION))
- meta_window_move_resize_internal (window,
- flags,
- gravity,
- x,
- y,
- width,
- height);
-
- /* window->user_rect exists to allow "snapping-back" the window if a
- * new strut is set (causing the window to move) and then the strut
- * is later removed without the user moving the window in the
- * interim. We'd like to "snap-back" to the position specified by
- * ConfigureRequest events (at least the constrained version of the
- * ConfigureRequest, since that is guaranteed to be onscreen) so we
- * set user_rect here.
- *
- * See also bug 426519.
- */
- meta_window_save_user_window_placement (window);
-}
-
/*
* Move window to the requested workspace; append controls whether new WS
* should be created if one does not exist.
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index 422447e..60fc253 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -1583,6 +1583,171 @@ meta_window_same_client (MetaWindow *window,
(other_window->xwindow & ~resource_mask));
}
+static void
+meta_window_move_resize_request (MetaWindow *window,
+ guint value_mask,
+ int gravity,
+ int new_x,
+ int new_y,
+ int new_width,
+ int new_height)
+{
+ int x, y, width, height;
+ gboolean allow_position_change;
+ gboolean in_grab_op;
+ MetaMoveResizeFlags flags;
+
+ /* We ignore configure requests while the user is moving/resizing
+ * the window, since these represent the app sucking and fighting
+ * the user, most likely due to a bug in the app (e.g. pfaedit
+ * seemed to do this)
+ *
+ * Still have to do the ConfigureNotify and all, but pretend the
+ * app asked for the current size/position instead of the new one.
+ */
+ in_grab_op = FALSE;
+ if (window->display->grab_op != META_GRAB_OP_NONE &&
+ window == window->display->grab_window)
+ {
+ switch (window->display->grab_op)
+ {
+ case META_GRAB_OP_MOVING:
+ case META_GRAB_OP_RESIZING_SE:
+ case META_GRAB_OP_RESIZING_S:
+ case META_GRAB_OP_RESIZING_SW:
+ case META_GRAB_OP_RESIZING_N:
+ case META_GRAB_OP_RESIZING_NE:
+ case META_GRAB_OP_RESIZING_NW:
+ case META_GRAB_OP_RESIZING_W:
+ case META_GRAB_OP_RESIZING_E:
+ in_grab_op = TRUE;
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* it's essential to use only the explicitly-set fields,
+ * and otherwise use our current up-to-date position.
+ *
+ * Otherwise you get spurious position changes when the app changes
+ * size, for example, if window->rect is not in sync with the
+ * server-side position in effect when the configure request was
+ * generated.
+ */
+ meta_window_get_gravity_position (window,
+ gravity,
+ &x, &y);
+
+ allow_position_change = FALSE;
+
+ if (meta_prefs_get_disable_workarounds ())
+ {
+ if (window->type == META_WINDOW_DIALOG ||
+ window->type == META_WINDOW_MODAL_DIALOG ||
+ window->type == META_WINDOW_SPLASHSCREEN)
+ ; /* No position change for these */
+ else if ((window->size_hints.flags & PPosition) ||
+ /* USPosition is just stale if window is placed;
+ * no --geometry involved here.
+ */
+ ((window->size_hints.flags & USPosition) &&
+ !window->placed))
+ allow_position_change = TRUE;
+ }
+ else
+ {
+ allow_position_change = TRUE;
+ }
+
+ if (in_grab_op)
+ allow_position_change = FALSE;
+
+ if (allow_position_change)
+ {
+ if (value_mask & CWX)
+ x = new_x;
+ if (value_mask & CWY)
+ y = new_y;
+ if (value_mask & (CWX | CWY))
+ {
+ /* Once manually positioned, windows shouldn't be placed
+ * by the window manager.
+ */
+ window->placed = TRUE;
+ }
+ }
+ else
+ {
+ meta_topic (META_DEBUG_GEOMETRY,
+ "Not allowing position change for window %s PPosition 0x%lx USPosition 0x%lx type %u\n",
+ window->desc, window->size_hints.flags & PPosition,
+ window->size_hints.flags & USPosition,
+ window->type);
+ }
+
+ width = window->rect.width;
+ height = window->rect.height;
+ if (!in_grab_op)
+ {
+ if (value_mask & CWWidth)
+ width = new_width;
+
+ if (value_mask & CWHeight)
+ height = new_height;
+ }
+
+ /* ICCCM 4.1.5 */
+
+ /* We're ignoring the value_mask here, since sizes
+ * not in the mask will be the current window geometry.
+ */
+ window->size_hints.x = x;
+ window->size_hints.y = y;
+ window->size_hints.width = width;
+ window->size_hints.height = height;
+
+ /* NOTE: We consider ConfigureRequests to be "user" actions in one
+ * way, but not in another. Explanation of the two cases are in the
+ * next two big comments.
+ */
+
+ /* The constraints code allows user actions to move windows
+ * offscreen, etc., and configure request actions would often send
+ * windows offscreen when users don't want it if not constrained
+ * (e.g. hitting a dropdown triangle in a fileselector to show more
+ * options, which makes the window bigger). Thus we do not set
+ * META_IS_USER_ACTION in flags to the
+ * meta_window_move_resize_internal() call.
+ */
+ flags = META_IS_CONFIGURE_REQUEST;
+ if (value_mask & (CWX | CWY))
+ flags |= META_IS_MOVE_ACTION;
+ if (value_mask & (CWWidth | CWHeight))
+ flags |= META_IS_RESIZE_ACTION;
+
+ if (flags & (META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION))
+ meta_window_move_resize_internal (window,
+ flags,
+ gravity,
+ x,
+ y,
+ width,
+ height);
+
+ /* window->user_rect exists to allow "snapping-back" the window if a
+ * new strut is set (causing the window to move) and then the strut
+ * is later removed without the user moving the window in the
+ * interim. We'd like to "snap-back" to the position specified by
+ * ConfigureRequest events (at least the constrained version of the
+ * ConfigureRequest, since that is guaranteed to be onscreen) so we
+ * set user_rect here.
+ *
+ * See also bug 426519.
+ */
+ meta_window_save_user_window_placement (window);
+}
+
gboolean
meta_window_x11_configure_request (MetaWindow *window,
XEvent *event)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]