[mutter] window: Atomically unmaximize both directions from a _NET_WM_STATE ClientMessage
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Atomically unmaximize both directions from a _NET_WM_STATE ClientMessage
- Date: Mon, 13 Jan 2014 16:35:22 +0000 (UTC)
commit 0b003bb89570f3fd3579cb09223206d558fb7bdf
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Mon Jan 13 09:27:46 2014 -0500
window: Atomically unmaximize both directions from a _NET_WM_STATE ClientMessage
When GDK sends an unmaximize _NET_WM_STATE ClientMessage, it tells us to remove
the _NET_WM_STATE_MAXIMIZED_HORZ and _NET_WM_STATE_MAXIMIZED_VERT states. Before
this time, it would independently call:
meta_window_unmaximize (window, META_MAXIMIZE_HORIZONTAL);
meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL);
Which, besides being foolishly inefficient, would also mess up our saved_rect
tracking, causing the window to only look like it was unmaximized vertically.
Make this code more intelligent, so it causes us to unmaximize in one call.
https://bugzilla.gnome.org/show_bug.cgi?id=722108
src/core/window.c | 36 +++++++++++++-----------------------
1 files changed, 13 insertions(+), 23 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index b56b17a..0885f03 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -6860,46 +6860,36 @@ meta_window_client_message (MetaWindow *window,
}
if (first == display->atom__NET_WM_STATE_MAXIMIZED_HORZ ||
- second == display->atom__NET_WM_STATE_MAXIMIZED_HORZ)
+ second == display->atom__NET_WM_STATE_MAXIMIZED_HORZ ||
+ first == display->atom__NET_WM_STATE_MAXIMIZED_VERT ||
+ second == display->atom__NET_WM_STATE_MAXIMIZED_VERT)
{
gboolean max;
+ MetaMaximizeFlags directions = 0;
max = (action == _NET_WM_STATE_ADD ||
(action == _NET_WM_STATE_TOGGLE &&
!window->maximized_horizontally));
- if (max && window->has_maximize_func)
- {
- if (meta_prefs_get_raise_on_click ())
- meta_window_raise (window);
- meta_window_maximize (window, META_MAXIMIZE_HORIZONTAL);
- }
- else
- {
- if (meta_prefs_get_raise_on_click ())
- meta_window_raise (window);
- meta_window_unmaximize (window, META_MAXIMIZE_HORIZONTAL);
- }
- }
- if (first == display->atom__NET_WM_STATE_MAXIMIZED_VERT ||
- second == display->atom__NET_WM_STATE_MAXIMIZED_VERT)
- {
- gboolean max;
+ if (first == display->atom__NET_WM_STATE_MAXIMIZED_HORZ ||
+ second == display->atom__NET_WM_STATE_MAXIMIZED_HORZ)
+ directions |= META_MAXIMIZE_HORIZONTAL;
+
+ if (first == display->atom__NET_WM_STATE_MAXIMIZED_VERT ||
+ second == display->atom__NET_WM_STATE_MAXIMIZED_VERT)
+ directions |= META_MAXIMIZE_VERTICAL;
- max = (action == _NET_WM_STATE_ADD ||
- (action == _NET_WM_STATE_TOGGLE &&
- !window->maximized_vertically));
if (max && window->has_maximize_func)
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
- meta_window_maximize (window, META_MAXIMIZE_VERTICAL);
+ meta_window_maximize (window, directions);
}
else
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
- meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL);
+ meta_window_unmaximize (window, directions);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]