135 lines
4.6 KiB
Diff
135 lines
4.6 KiB
Diff
|
From 3f3c8876e0494cf7af92ce9b216da70fd4c0c275 Mon Sep 17 00:00:00 2001
|
||
|
From: Xiaoguang Wang <sun.wxg@gmail.com>
|
||
|
Date: Tue, 23 Apr 2024 12:28:45 +0800
|
||
|
Subject: [PATCH] Revert "clutter/stage: Avoid queueing stage updates when
|
||
|
they're already queued"
|
||
|
|
||
|
This reverts commit 261f516af4e635d4bb263bbbbb2f843f0cbe09de.
|
||
|
---
|
||
|
clutter/clutter/clutter-stage-private.h | 2 +-
|
||
|
clutter/clutter/clutter-stage-view.c | 2 +-
|
||
|
clutter/clutter/clutter-stage.c | 30 +++++++++----------------
|
||
|
3 files changed, 12 insertions(+), 22 deletions(-)
|
||
|
|
||
|
diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h
|
||
|
index c2460b327..f84fb10fe 100644
|
||
|
--- a/clutter/clutter/clutter-stage-private.h
|
||
|
+++ b/clutter/clutter/clutter-stage-private.h
|
||
|
@@ -61,7 +61,7 @@ void clutter_stage_emit_before_paint (ClutterStage
|
||
|
void clutter_stage_emit_after_paint (ClutterStage *stage,
|
||
|
ClutterStageView *view,
|
||
|
ClutterFrame *frame);
|
||
|
-void clutter_stage_after_update (ClutterStage *stage,
|
||
|
+void clutter_stage_emit_after_update (ClutterStage *stage,
|
||
|
ClutterStageView *view,
|
||
|
ClutterFrame *frame);
|
||
|
|
||
|
diff --git a/clutter/clutter/clutter-stage-view.c b/clutter/clutter/clutter-stage-view.c
|
||
|
index 168746dd4..b59d1cc00 100644
|
||
|
--- a/clutter/clutter/clutter-stage-view.c
|
||
|
+++ b/clutter/clutter/clutter-stage-view.c
|
||
|
@@ -1279,7 +1279,7 @@ handle_frame_clock_frame (ClutterFrameClock *frame_clock,
|
||
|
priv->needs_update_devices = FALSE;
|
||
|
|
||
|
_clutter_run_repaint_functions (CLUTTER_REPAINT_FLAGS_POST_PAINT);
|
||
|
- clutter_stage_after_update (stage, view, frame);
|
||
|
+ clutter_stage_emit_after_update (stage, view, frame);
|
||
|
|
||
|
return clutter_frame_get_result (frame);
|
||
|
}
|
||
|
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
|
||
|
index 47405872b..f1d40426f 100644
|
||
|
--- a/clutter/clutter/clutter-stage.c
|
||
|
+++ b/clutter/clutter/clutter-stage.c
|
||
|
@@ -137,8 +137,6 @@ struct _ClutterStagePrivate
|
||
|
|
||
|
int update_freeze_count;
|
||
|
|
||
|
- gboolean update_scheduled;
|
||
|
-
|
||
|
GHashTable *pointer_devices;
|
||
|
GHashTable *touch_sequences;
|
||
|
|
||
|
@@ -528,15 +526,11 @@ clutter_stage_emit_after_paint (ClutterStage *stage,
|
||
|
}
|
||
|
|
||
|
void
|
||
|
-clutter_stage_after_update (ClutterStage *stage,
|
||
|
- ClutterStageView *view,
|
||
|
- ClutterFrame *frame)
|
||
|
+clutter_stage_emit_after_update (ClutterStage *stage,
|
||
|
+ ClutterStageView *view,
|
||
|
+ ClutterFrame *frame)
|
||
|
{
|
||
|
- ClutterStagePrivate *priv = stage->priv;
|
||
|
-
|
||
|
g_signal_emit (stage, stage_signals[AFTER_UPDATE], 0, view, frame);
|
||
|
-
|
||
|
- priv->update_scheduled = FALSE;
|
||
|
}
|
||
|
|
||
|
static gboolean
|
||
|
@@ -647,15 +641,19 @@ _clutter_stage_queue_event (ClutterStage *stage,
|
||
|
gboolean copy_event)
|
||
|
{
|
||
|
ClutterStagePrivate *priv;
|
||
|
+ gboolean first_event;
|
||
|
|
||
|
g_return_if_fail (CLUTTER_IS_STAGE (stage));
|
||
|
|
||
|
priv = stage->priv;
|
||
|
|
||
|
+ first_event = priv->event_queue->length == 0;
|
||
|
+
|
||
|
g_queue_push_tail (priv->event_queue,
|
||
|
copy_event ? clutter_event_copy (event) : event);
|
||
|
|
||
|
- clutter_stage_schedule_update (stage);
|
||
|
+ if (first_event)
|
||
|
+ clutter_stage_schedule_update (stage);
|
||
|
}
|
||
|
|
||
|
gboolean
|
||
|
@@ -818,7 +816,8 @@ clutter_stage_queue_actor_relayout (ClutterStage *stage,
|
||
|
{
|
||
|
ClutterStagePrivate *priv = stage->priv;
|
||
|
|
||
|
- clutter_stage_schedule_update (stage);
|
||
|
+ if (priv->pending_relayouts == NULL)
|
||
|
+ clutter_stage_schedule_update (stage);
|
||
|
|
||
|
priv->pending_relayouts = g_slist_prepend (priv->pending_relayouts,
|
||
|
g_object_ref (actor));
|
||
|
@@ -2532,19 +2531,12 @@ _clutter_stage_get_default_window (void)
|
||
|
void
|
||
|
clutter_stage_schedule_update (ClutterStage *stage)
|
||
|
{
|
||
|
- ClutterStagePrivate *priv = stage->priv;
|
||
|
ClutterStageWindow *stage_window;
|
||
|
- gboolean first_event;
|
||
|
GList *l;
|
||
|
|
||
|
if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
|
||
|
return;
|
||
|
|
||
|
- first_event = priv->event_queue->length == 0;
|
||
|
-
|
||
|
- if (priv->update_scheduled && !first_event)
|
||
|
- return;
|
||
|
-
|
||
|
stage_window = _clutter_stage_get_window (stage);
|
||
|
if (stage_window == NULL)
|
||
|
return;
|
||
|
@@ -2555,8 +2547,6 @@ clutter_stage_schedule_update (ClutterStage *stage)
|
||
|
|
||
|
clutter_stage_view_schedule_update (view);
|
||
|
}
|
||
|
-
|
||
|
- priv->update_scheduled = TRUE;
|
||
|
}
|
||
|
|
||
|
ClutterPaintVolume *
|
||
|
--
|
||
|
2.44.0
|
||
|
|