Bug 1430018 - Block popup input events on container widget for popups on Wayland, r?jhorak draft
authorMartin Stransky <stransky@redhat.com>
Fri, 12 Jan 2018 10:57:03 +0100
changeset 719553 401e5bd1072d8d1dd69c632799ad6d5d5b3da01c
parent 719552 25567ad05a67efeb22d719e1da62cdc04c7b55ad
child 719554 326baee5cb3fc1525d85b91e88dc941c5166bb50
child 719558 1c5d58790442de36f97d22201445b44c21c1e8b4
push id95289
push userstransky@redhat.com
push dateFri, 12 Jan 2018 10:09:44 +0000
reviewersjhorak
bugs1430018
milestone59.0a1
Bug 1430018 - Block popup input events on container widget for popups on Wayland, r?jhorak MozReview-Commit-ID: Hj1Sy704p8n
widget/gtk/mozgtk/mozgtk.c
widget/gtk/nsWindow.cpp
--- a/widget/gtk/mozgtk/mozgtk.c
+++ b/widget/gtk/mozgtk/mozgtk.c
@@ -583,16 +583,17 @@ STUB(gtk_style_context_set_parent)
 STUB(gtk_style_context_set_state)
 STUB(gtk_style_properties_lookup_property)
 STUB(gtk_tree_view_column_get_button)
 STUB(gtk_widget_get_preferred_size)
 STUB(gtk_widget_get_preferred_width)
 STUB(gtk_widget_get_preferred_height)
 STUB(gtk_widget_get_state_flags)
 STUB(gtk_widget_get_style_context)
+STUB(gtk_widget_input_shape_combine_region)
 STUB(gtk_widget_path_append_type)
 STUB(gtk_widget_path_copy)
 STUB(gtk_widget_path_free)
 STUB(gtk_widget_path_iter_add_class)
 STUB(gtk_widget_path_get_object_type)
 STUB(gtk_widget_path_new)
 STUB(gtk_widget_path_unref)
 STUB(gtk_widget_set_visual)
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -3868,17 +3868,21 @@ nsWindow::Create(nsIWidget* aParent,
               GdkRegion *region = gdk_region_rectangle(&rect);
 
               gdk_window_input_shape_combine_region(mGdkWindow, region, 0, 0);
               gdk_region_destroy(region);
 #else
               cairo_rectangle_int_t rect = { 0, 0, 0, 0 };
               cairo_region_t *region = cairo_region_create_rectangle(&rect);
 
-              gdk_window_input_shape_combine_region(mGdkWindow, region, 0, 0);
+              // On Wayland we render/listen on container even on popup,
+              // so we also need to block input events there.
+              GtkWidget *inputWidget = (drawToContainer && !mIsX11Display) ?
+                                       container : mShell;
+              gtk_widget_input_shape_combine_region(inputWidget, region);
               cairo_region_destroy(region);
 #endif
             }
         }
     }
         break;
 
     case eWindowType_plugin: