Bug 1186967 - ignore double-click on WM without _NET_WM_MOVERESIZE support, r?jhorak draft
authorMartin Stransky <stransky@redhat.com>
Tue, 17 Oct 2017 09:50:18 +0200
changeset 681395 b906b754c754236b92294ffbff342fc64867f893
parent 680490 4ab539ae8b5b2927e219b219d5735f2557e82425
child 736135 e52efe33739874d4c63f6c36a3880931bf967a8d
push id84814
push userstransky@redhat.com
push dateTue, 17 Oct 2017 07:50:53 +0000
reviewersjhorak
bugs1186967
milestone58.0a1
Bug 1186967 - ignore double-click on WM without _NET_WM_MOVERESIZE support, r?jhorak MozReview-Commit-ID: 2Vs6i5leero
widget/gtk/nsWindow.cpp
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -6439,16 +6439,32 @@ nsWindow::GetDragInfo(WidgetMouseEvent* 
     MOZ_ASSERT(gdk_window,
                "gdk_window_get_toplevel should not return null");
     *aWindow = gdk_window;
 
     if (!aMouseEvent->mWidget) {
         return false;
     }
 
+    if (mIsX11Display) {
+      // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=789054
+      // To avoid crashes disable double-click on WM without _NET_WM_MOVERESIZE.
+      // See _should_perform_ewmh_drag() at gdkwindow-x11.c
+      GdkScreen* screen = gdk_window_get_screen(gdk_window);
+      GdkAtom atom = gdk_atom_intern("_NET_WM_MOVERESIZE", FALSE);
+      if (!gdk_x11_screen_supports_net_wm_hint(screen, atom)) {
+          static unsigned int lastTimeStamp = 0;
+          if (lastTimeStamp != aMouseEvent->mTime) {
+              lastTimeStamp = aMouseEvent->mTime;
+          } else {
+              return false;
+          }
+      }
+    }
+
     // FIXME: It would be nice to have the widget position at the time
     // of the event, but it's relatively unlikely that the widget has
     // moved since the mousedown.  (On the other hand, it's quite likely
     // that the mouse has moved, which is why we use the mouse position
     // from the event.)
     LayoutDeviceIntPoint offset = aMouseEvent->mWidget->WidgetToScreenOffset();
     *aRootX = aMouseEvent->mRefPoint.x + offset.x;
     *aRootY = aMouseEvent->mRefPoint.y + offset.y;