[gtk/wip/matthiasc/popup5: 130/151] surface: Make only toplevels control events
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/popup5: 130/151] surface: Make only toplevels control events
- Date: Tue, 28 May 2019 20:39:36 +0000 (UTC)
commit 895962d781971d7eebb95acb0bc6ab39115dac7b
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.
And don't connect to paint either - handle paint
on popups recursively.
gdk/gdksurface.c | 62 ++++++++++++++++++++++++++++++++------------------------
1 file changed, 35 insertions(+), 27 deletions(-)
---
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 7db9f2cc8d..c48a3b0959 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -1371,9 +1371,8 @@ static void
gdk_surface_paint_on_clock (GdkFrameClock *clock,
void *data)
{
- GdkSurface *surface;
-
- surface = GDK_SURFACE (data);
+ GdkSurface *surface = GDK_SURFACE (data);
+ GList *l;
g_return_if_fail (GDK_IS_SURFACE (surface));
@@ -1394,6 +1393,9 @@ gdk_surface_paint_on_clock (GdkFrameClock *clock,
gdk_surface_remove_update_surface (surface);
}
+ for (l = surface->children; l; l = l->next)
+ gdk_surface_paint_on_clock (clock, l->data);
+
g_object_unref (surface);
}
@@ -3725,34 +3727,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);
- 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->parent == NULL)
+ {
+ 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);
+ }
}
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);
- 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);
+ if (surface->parent == NULL)
+ {
+ 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_object_unref (surface->frame_clock);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]