Bug 1418829 - nsLookAndFeel enables rendering to the titlebar for supported window managers only, r?jhorak draft
authorMartin Stransky <stransky@redhat.com>
Mon, 20 Nov 2017 14:29:49 +0100
changeset 701417 453905d4ac30fc62a1ee722d658ac748fdc50f0d
parent 701416 a144519fc87a5cd91574ac53123954bdaf1dfa5d
child 701418 35d9a2dfb6be5949ee42ec04130ffb83af8cb240
push id90144
push userstransky@redhat.com
push dateTue, 21 Nov 2017 16:09:14 +0000
reviewersjhorak
bugs1418829
milestone59.0a1
Bug 1418829 - nsLookAndFeel enables rendering to the titlebar for supported window managers only, r?jhorak MozReview-Commit-ID: JvqQuZenkWy
widget/gtk/nsLookAndFeel.cpp
widget/gtk/nsWindow.cpp
--- a/widget/gtk/nsLookAndFeel.cpp
+++ b/widget/gtk/nsLookAndFeel.cpp
@@ -19,16 +19,17 @@
 #include <fontconfig/fontconfig.h>
 #include "gfxPlatformGtk.h"
 #include "ScreenHelperGTK.h"
 
 #include "gtkdrawing.h"
 #include "nsStyleConsts.h"
 #include "gfxFontConstants.h"
 #include "WidgetUtils.h"
+#include "nsWindow.h"
 
 #include <dlfcn.h>
 
 #include "mozilla/gfx/2D.h"
 
 #include <cairo-gobject.h>
 #include "WidgetStyleCache.h"
 #include "prenv.h"
@@ -1071,21 +1072,22 @@ nsLookAndFeel::EnsureInit()
                          nullptr);
 
     GetSystemFontInfo(gtk_widget_get_style_context(entry),
                       &mFieldFontName, &mFieldFontStyle);
 
     gtk_widget_destroy(window);
     g_object_unref(labelWidget);
 
-    // Require GTK 3.10 for GtkHeaderBar support.
-    mCSDAvailable = gtk_check_version(3, 10, 0) == nullptr;
+    // Require GTK 3.10 for GtkHeaderBar support and compatible window manager.
+    mCSDAvailable = (gtk_check_version(3, 10, 0) == nullptr &&
+        nsWindow::GetCSDSupportLevel() != nsWindow::CSD_SUPPORT_NONE);
     if (mCSDAvailable) {
         mCSDAvailable =
-            mozilla::Preferences::GetBool("widget.allow-client-side-decoration",
+            mozilla::Preferences::GetBool("browser.tabs.drawInTitlebar",
                                           false);
     }
 
     // We need to initialize whole CSD config explicitly because it's queried
     // as -moz-gtk* media features.
     mCSDCloseButton = true;
     mCSDMaximizeButton = false;
     mCSDMinimizeButton = false;
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -3750,23 +3750,21 @@ nsWindow::Create(nsIWidget* aParent,
             gtk_window_set_wmclass(GTK_WINDOW(mShell), "Toplevel",
                                    gdk_get_program_class());
 
             // each toplevel window gets its own window group
             GtkWindowGroup *group = gtk_window_group_new();
             gtk_window_group_add_window(group, GTK_WINDOW(mShell));
             g_object_unref(group);
 
-            if (GetCSDSupportLevel() != CSD_SUPPORT_NONE) {
-                int32_t isCSDAvailable = false;
-                nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
-                                                &isCSDAvailable);
-                if (NS_SUCCEEDED(rv)) {
-                   mIsCSDAvailable = isCSDAvailable;
-                }
+            int32_t isCSDAvailable = false;
+            nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
+                                              &isCSDAvailable);
+            if (NS_SUCCEEDED(rv)) {
+               mIsCSDAvailable = isCSDAvailable;
             }
         }
 
         // Create a container to hold child windows and child GtkWidgets.
         GtkWidget *container = moz_container_new();
         mContainer = MOZ_CONTAINER(container);
 
 #if (MOZ_WIDGET_GTK == 3)