summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Pokorny <andreas.pokorny@canonical.com>2016-07-12 16:25:01 +0200
committerWilliam Hua <william.hua@canonical.com>2016-08-10 13:41:27 -0400
commitf95d270372f1b798d67c0de18b6da37c6560ec9e (patch)
tree76f1d76ac0a2e70bdb5463b2b33874b8a0e0c850
parentda17eae747a060ebaa05e777ab3ae68b070d0ef4 (diff)
downloadgtk+-f95d270372f1b798d67c0de18b6da37c6560ec9e.tar.gz
Only apply type hint if it would map to a different mir surface type
Signed-off-by: Andreas Pokorny <andreas.pokorny@canonical.com>
-rw-r--r--gdk/mir/gdkmirwindowimpl.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
index 3da3b66be0..0bc1e2d19d 100644
--- a/gdk/mir/gdkmirwindowimpl.c
+++ b/gdk/mir/gdkmirwindowimpl.c
@@ -106,6 +106,46 @@ static cairo_surface_t *gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window
static void ensure_surface (GdkWindow *window);
static void apply_geometry_hints (MirSurfaceSpec *spec, GdkMirWindowImpl *impl);
+static gboolean
+type_hint_differs (GdkWindowTypeHint lhs, GdkWindowTypeHint rhs)
+{
+ if (lhs == rhs)
+ return FALSE;
+
+ switch (lhs)
+ {
+ case GDK_WINDOW_TYPE_HINT_DIALOG:
+ case GDK_WINDOW_TYPE_HINT_DOCK:
+ return rhs != GDK_WINDOW_TYPE_HINT_DIALOG &&
+ rhs != GDK_WINDOW_TYPE_HINT_DOCK;
+ case GDK_WINDOW_TYPE_HINT_MENU:
+ case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
+ case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
+ case GDK_WINDOW_TYPE_HINT_TOOLBAR:
+ case GDK_WINDOW_TYPE_HINT_COMBO:
+ return rhs != GDK_WINDOW_TYPE_HINT_MENU &&
+ rhs != GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU &&
+ rhs != GDK_WINDOW_TYPE_HINT_POPUP_MENU &&
+ rhs != GDK_WINDOW_TYPE_HINT_TOOLBAR &&
+ rhs != GDK_WINDOW_TYPE_HINT_COMBO;
+ case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
+ case GDK_WINDOW_TYPE_HINT_UTILITY:
+ return rhs != GDK_WINDOW_TYPE_HINT_SPLASHSCREEN &&
+ rhs != GDK_WINDOW_TYPE_HINT_UTILITY;
+ case GDK_WINDOW_TYPE_HINT_DND:
+ case GDK_WINDOW_TYPE_HINT_TOOLTIP:
+ case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
+ return rhs != GDK_WINDOW_TYPE_HINT_DND &&
+ rhs != GDK_WINDOW_TYPE_HINT_TOOLTIP &&
+ rhs != GDK_WINDOW_TYPE_HINT_NOTIFICATION;
+ case GDK_WINDOW_TYPE_HINT_NORMAL:
+ case GDK_WINDOW_TYPE_HINT_DESKTOP:
+ default:
+ return rhs != GDK_WINDOW_TYPE_HINT_NORMAL &&
+ rhs != GDK_WINDOW_TYPE_HINT_DESKTOP;
+ }
+}
+
static void
drop_cairo_surface (GdkWindow *window)
{
@@ -1045,7 +1085,7 @@ gdk_mir_window_impl_set_type_hint (GdkWindow *window,
{
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
- if (hint != impl->type_hint)
+ if (type_hint_differs (hint, impl->type_hint))
{
impl->type_hint = hint;
if (impl->surface && !impl->pending_spec_update)