Bug 1430018 - Don't call gdk_flush() from expose event on Wayland as it crashes Gtk+ (Gnome BZ #773307), r?jhorak draft
authorMartin Stransky <stransky@redhat.com>
Fri, 12 Jan 2018 11:07:23 +0100
changeset 720423 6420fa6d8d1bec260e20e2b21dbfa36ed8dd1ee9
parent 720422 e0359524dc59bf61f9038abea2da91bb6f7cc8ce
child 720424 bfd23378bb08e96536d10cee5aad9aad90603bb0
push id95548
push userstransky@redhat.com
push dateMon, 15 Jan 2018 15:50:15 +0000
reviewersjhorak
bugs1430018, 773307
milestone59.0a1
Bug 1430018 - Don't call gdk_flush() from expose event on Wayland as it crashes Gtk+ (Gnome BZ #773307), r?jhorak MozReview-Commit-ID: EmwcG3VzHYn
widget/gtk/nsNativeThemeGTK.cpp
--- a/widget/gtk/nsNativeThemeGTK.cpp
+++ b/widget/gtk/nsNativeThemeGTK.cpp
@@ -24,16 +24,17 @@
 #include "nsGkAtoms.h"
 #include "nsAttrValueInlines.h"
 
 #include "mozilla/EventStates.h"
 #include "mozilla/Services.h"
 
 #include <gdk/gdkprivate.h>
 #include <gtk/gtk.h>
+#include <gtk/gtkx.h>
 
 #include "gfxContext.h"
 #include "gfxPlatformGtk.h"
 #include "gfxGdkNativeRenderer.h"
 #include "mozilla/gfx/BorrowedContext.h"
 #include "mozilla/gfx/HelpersCairo.h"
 #include "mozilla/gfx/PathHelpers.h"
 
@@ -1205,17 +1206,21 @@ nsNativeThemeGTK::DrawWidgetBackground(g
 #else 
   DrawThemeWithCairo(ctx, aContext->GetDrawTarget(),
                      state, gtkWidgetType, flags, direction, scaleFactor,
                      snapped, ToPoint(origin), drawingRect.Size(),
                      gdk_rect, transparency);
 #endif
 
   if (!safeState) {
-    gdk_flush();
+    // gdk_flush() call from expose event crashes Gtk+ on Wayland
+    // (Gnome BZ #773307)
+    if (GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
+      gdk_flush();
+    }
     gLastGdkError = gdk_error_trap_pop ();
 
     if (gLastGdkError) {
 #ifdef DEBUG
       printf("GTK theme failed for widget type %d, error was %d, state was "
              "[active=%d,focused=%d,inHover=%d,disabled=%d]\n",
              aWidgetType, gLastGdkError, state.active, state.focused,
              state.inHover, state.disabled);