summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-gnome/recipes-gnome/metacity/metacity/screen_avoid_sn_startup_sequence_get_last_active_time.patch188
-rw-r--r--meta-gnome/recipes-gnome/metacity/metacity_3.52.0.bb3
2 files changed, 190 insertions, 1 deletions
diff --git a/meta-gnome/recipes-gnome/metacity/metacity/screen_avoid_sn_startup_sequence_get_last_active_time.patch b/meta-gnome/recipes-gnome/metacity/metacity/screen_avoid_sn_startup_sequence_get_last_active_time.patch
new file mode 100644
index 0000000000..d641a9139d
--- /dev/null
+++ b/meta-gnome/recipes-gnome/metacity/metacity/screen_avoid_sn_startup_sequence_get_last_active_time.patch
@@ -0,0 +1,188 @@
1From 89eecad37d4c5faa7a7cc5c6e23cd11e76157a92 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= <alberts.muktupavels@gmail.com>
3Date: Sun, 27 Oct 2024 18:20:32 +0200
4Subject: [PATCH] screen: avoid sn_startup_sequence_get_last_active_time
5
6startup-notification has change that changes `tv_sec` parameter
7type from `long` to `time_t` for over 10 years but there has not
8been new release.
9
10`get_last_active_time` returns same time as `get_initiated_time`
11which is simply time when startup was initiated. To avoid potential
12problems using wrong type we can just stop using related function
13and record initiation time ourselves.
14
15Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/metacity/-/commit/89eecad37d4c5faa7a7cc5c6e23cd11e76157a92]
16Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
17---
18 src/core/screen.c | 84 ++++++++++++++++++++++++++++++++++++++---------
19 1 file changed, 69 insertions(+), 15 deletions(-)
20
21diff --git a/src/core/screen.c b/src/core/screen.c
22index 495222f5..e79b54fb 100644
23--- a/src/core/screen.c
24+++ b/src/core/screen.c
25@@ -143,6 +143,34 @@ set_wm_icon_size_hint (MetaScreen *screen)
26 #undef N_VALS
27 }
28
29+typedef struct
30+{
31+ SnStartupSequence *sequence;
32+ int64_t time;
33+} MetaStartupSequence;
34+
35+static MetaStartupSequence *
36+meta_startup_sequence_new (SnStartupSequence *sequence)
37+{
38+ MetaStartupSequence *self;
39+
40+ self = g_new0 (MetaStartupSequence, 1);
41+
42+ self->sequence = sequence;
43+ self->time = g_get_real_time ();
44+
45+ sn_startup_sequence_ref (sequence);
46+
47+ return self;
48+}
49+
50+static void
51+meta_startup_sequence_free (MetaStartupSequence *self)
52+{
53+ g_clear_pointer (&self->sequence, sn_startup_sequence_unref);
54+ g_free (self);
55+}
56+
57 static void
58 reload_monitor_infos (MetaScreen *screen)
59 {
60@@ -543,7 +543,7 @@
61 meta_screen_ungrab_keys (screen);
62
63 #ifdef HAVE_STARTUP_NOTIFICATION
64- g_slist_free_full (screen->startup_sequences, (GDestroyNotify) sn_startup_sequence_unref);
65+ g_slist_free_full (screen->startup_sequences, (GDestroyNotify) meta_startup_sequence_free);
66 screen->startup_sequences = NULL;
67
68 if (screen->startup_sequence_timeout != 0)
69@@ -2366,12 +2394,15 @@ static void
70 add_sequence (MetaScreen *screen,
71 SnStartupSequence *sequence)
72 {
73+ MetaStartupSequence *meta_sequence;
74+
75 meta_topic (META_DEBUG_STARTUP,
76 "Adding sequence %s\n",
77 sn_startup_sequence_get_id (sequence));
78- sn_startup_sequence_ref (sequence);
79+
80+ meta_sequence = meta_startup_sequence_new (sequence);
81 screen->startup_sequences = g_slist_prepend (screen->startup_sequences,
82- sequence);
83+ meta_sequence);
84
85 /* our timeout just polls every second, instead of bothering
86 * to compute exactly when we may next time out
87@@ -2384,17 +2415,38 @@ add_sequence (MetaScreen *screen,
88 update_startup_feedback (screen);
89 }
90
91+static int
92+find_sequence_func (gconstpointer a,
93+ gconstpointer b)
94+{
95+ MetaStartupSequence *meta_sequence;
96+ SnStartupSequence *sequence;
97+
98+ meta_sequence = (MetaStartupSequence *) a;
99+ sequence = (SnStartupSequence *) b;
100+
101+ if (meta_sequence->sequence == sequence)
102+ return 0;
103+
104+ return -1;
105+}
106+
107 static void
108 remove_sequence (MetaScreen *screen,
109 SnStartupSequence *sequence)
110 {
111+ GSList *l;
112+
113 meta_topic (META_DEBUG_STARTUP,
114 "Removing sequence %s\n",
115 sn_startup_sequence_get_id (sequence));
116
117- screen->startup_sequences = g_slist_remove (screen->startup_sequences,
118- sequence);
119- sn_startup_sequence_unref (sequence);
120+ l = g_slist_find_custom (screen->startup_sequences,
121+ sequence,
122+ find_sequence_func);
123+
124+ screen->startup_sequences = g_slist_remove_link (screen->startup_sequences, l);
125+ g_slist_free_full (l, (GDestroyNotify) meta_startup_sequence_free);
126
127 if (screen->startup_sequences == NULL &&
128 screen->startup_sequence_timeout != 0)
129@@ -2424,13 +2476,11 @@ collect_timed_out_foreach (void *element,
130 void *data)
131 {
132 CollectTimedOutData *ctod = data;
133- SnStartupSequence *sequence = element;
134- long tv_sec, tv_usec;
135+ MetaStartupSequence *meta_sequence = element;
136+ SnStartupSequence *sequence = meta_sequence->sequence;
137 double elapsed;
138
139- sn_startup_sequence_get_last_active_time (sequence, &tv_sec, &tv_usec);
140-
141- elapsed = (ctod->now - (tv_sec * G_USEC_PER_SEC + tv_usec)) / 1000.0;
142+ elapsed = (ctod->now - meta_sequence->time) / 1000.0;
143
144 meta_topic (META_DEBUG_STARTUP,
145 "Sequence used %g seconds vs. %g max: %s\n",
146@@ -2572,9 +2622,11 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
147 tmp = screen->startup_sequences;
148 while (tmp != NULL)
149 {
150+ MetaStartupSequence *meta_sequence;
151 const char *wmclass;
152
153- wmclass = sn_startup_sequence_get_wmclass (tmp->data);
154+ meta_sequence = tmp->data;
155+ wmclass = sn_startup_sequence_get_wmclass (meta_sequence->sequence);
156
157 if (wmclass != NULL &&
158 ((window->res_class &&
159@@ -2582,7 +2634,7 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
160 (window->res_name &&
161 strcmp (wmclass, window->res_name) == 0)))
162 {
163- sequence = tmp->data;
164+ sequence = meta_sequence->sequence;
165
166 g_assert (window->startup_id == NULL);
167 window->startup_id = g_strdup (sn_startup_sequence_get_id (sequence));
168@@ -2614,13 +2666,15 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
169 tmp = screen->startup_sequences;
170 while (tmp != NULL)
171 {
172+ MetaStartupSequence *meta_sequence;
173 const char *id;
174
175- id = sn_startup_sequence_get_id (tmp->data);
176+ meta_sequence = tmp->data;
177+ id = sn_startup_sequence_get_id (meta_sequence->sequence);
178
179 if (strcmp (id, startup_id) == 0)
180 {
181- sequence = tmp->data;
182+ sequence = meta_sequence->sequence;
183 break;
184 }
185
186--
187GitLab
188
diff --git a/meta-gnome/recipes-gnome/metacity/metacity_3.52.0.bb b/meta-gnome/recipes-gnome/metacity/metacity_3.52.0.bb
index 32f0801706..7f202bb772 100644
--- a/meta-gnome/recipes-gnome/metacity/metacity_3.52.0.bb
+++ b/meta-gnome/recipes-gnome/metacity/metacity_3.52.0.bb
@@ -25,7 +25,8 @@ GNOMEBASEBUILDCLASS = "autotools"
25inherit gnomebase gsettings gettext upstream-version-is-even features_check 25inherit gnomebase gsettings gettext upstream-version-is-even features_check
26 26
27SRC_URI[archive.sha256sum] = "a72438ace6d5903ae79338c6098b1b35ab91c8a97c4323701d3bef1f3eeb191c" 27SRC_URI[archive.sha256sum] = "a72438ace6d5903ae79338c6098b1b35ab91c8a97c4323701d3bef1f3eeb191c"
28SRC_URI += "file://0001-drop-zenity-detection.patch" 28SRC_URI += "file://0001-drop-zenity-detection.patch \
29 file://screen_avoid_sn_startup_sequence_get_last_active_time.patch"
29 30
30PACKAGECONFIG[xinerama] = "--enable-xinerama,--disable-xinerama,libxinerama" 31PACKAGECONFIG[xinerama] = "--enable-xinerama,--disable-xinerama,libxinerama"
31# enable as neccessary until new warnings are dealt with 32# enable as neccessary until new warnings are dealt with