[gtk/wip/matthiasc/popup5] surface: Make only toplevels control events



commit b453831ae90708c4d13d2f112dbcf97c5327903a
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed May 22 20:58:24 2019 +0000

    surface: Make only toplevels control events
    
    There is no need for popups to connect to the frame
    clock to pause and unpause events on the display -
    the toplevel already does it.

 gdk/gdksurface.c | 40 +++++++++++++++++++++++-----------------
 1 file changed, 23 insertions(+), 17 deletions(-)
---
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 92da6cf419..7184ec5cad 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -3805,34 +3805,40 @@ gdk_surface_set_frame_clock (GdkSurface     *surface,
   if (clock)
     {
       g_object_ref (clock);
-      g_signal_connect (G_OBJECT (clock),
-                        "flush-events",
-                        G_CALLBACK (gdk_surface_flush_events),
-                        surface);
+      if (surface->surface_type == GDK_SURFACE_TOPLEVEL)
+        {
+          g_signal_connect (G_OBJECT (clock),
+                            "flush-events",
+                            G_CALLBACK (gdk_surface_flush_events),
+                            surface);
+          g_signal_connect (G_OBJECT (clock),
+                            "resume-events",
+                            G_CALLBACK (gdk_surface_resume_events),
+                            surface);
+        }
       g_signal_connect (G_OBJECT (clock),
                         "paint",
                         G_CALLBACK (gdk_surface_paint_on_clock),
                         surface);
-      g_signal_connect (G_OBJECT (clock),
-                        "resume-events",
-                        G_CALLBACK (gdk_surface_resume_events),
-                        surface);
     }
 
   if (surface->frame_clock)
     {
-      if (surface->frame_clock_events_paused)
-        gdk_surface_resume_events (surface->frame_clock, G_OBJECT (surface));
-
-      g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
-                                            G_CALLBACK (gdk_surface_flush_events),
-                                            surface);
+      if (surface->surface_type == GDK_SURFACE_TOPLEVEL)
+        {
+          if (surface->frame_clock_events_paused)
+            gdk_surface_resume_events (surface->frame_clock, G_OBJECT (surface));
+
+          g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
+                                                G_CALLBACK (gdk_surface_flush_events),
+                                                surface);
+          g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
+                                                G_CALLBACK (gdk_surface_resume_events),
+                                                surface);
+        }
       g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
                                             G_CALLBACK (gdk_surface_paint_on_clock),
                                             surface);
-      g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
-                                            G_CALLBACK (gdk_surface_resume_events),
-                                            surface);
       g_object_unref (surface->frame_clock);
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]