diff options
-rw-r--r-- | meta-gnome/recipes-gnome/metacity/metacity/screen_avoid_sn_startup_sequence_get_last_active_time.patch | 188 | ||||
-rw-r--r-- | meta-gnome/recipes-gnome/metacity/metacity_3.52.0.bb | 3 |
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 @@ | |||
1 | From 89eecad37d4c5faa7a7cc5c6e23cd11e76157a92 Mon Sep 17 00:00:00 2001 | ||
2 | From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= <alberts.muktupavels@gmail.com> | ||
3 | Date: Sun, 27 Oct 2024 18:20:32 +0200 | ||
4 | Subject: [PATCH] screen: avoid sn_startup_sequence_get_last_active_time | ||
5 | |||
6 | startup-notification has change that changes `tv_sec` parameter | ||
7 | type from `long` to `time_t` for over 10 years but there has not | ||
8 | been new release. | ||
9 | |||
10 | `get_last_active_time` returns same time as `get_initiated_time` | ||
11 | which is simply time when startup was initiated. To avoid potential | ||
12 | problems using wrong type we can just stop using related function | ||
13 | and record initiation time ourselves. | ||
14 | |||
15 | Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/metacity/-/commit/89eecad37d4c5faa7a7cc5c6e23cd11e76157a92] | ||
16 | Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com> | ||
17 | --- | ||
18 | src/core/screen.c | 84 ++++++++++++++++++++++++++++++++++++++--------- | ||
19 | 1 file changed, 69 insertions(+), 15 deletions(-) | ||
20 | |||
21 | diff --git a/src/core/screen.c b/src/core/screen.c | ||
22 | index 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 | -- | ||
187 | GitLab | ||
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" | |||
25 | inherit gnomebase gsettings gettext upstream-version-is-even features_check | 25 | inherit gnomebase gsettings gettext upstream-version-is-even features_check |
26 | 26 | ||
27 | SRC_URI[archive.sha256sum] = "a72438ace6d5903ae79338c6098b1b35ab91c8a97c4323701d3bef1f3eeb191c" | 27 | SRC_URI[archive.sha256sum] = "a72438ace6d5903ae79338c6098b1b35ab91c8a97c4323701d3bef1f3eeb191c" |
28 | SRC_URI += "file://0001-drop-zenity-detection.patch" | 28 | SRC_URI += "file://0001-drop-zenity-detection.patch \ |
29 | file://screen_avoid_sn_startup_sequence_get_last_active_time.patch" | ||
29 | 30 | ||
30 | PACKAGECONFIG[xinerama] = "--enable-xinerama,--disable-xinerama,libxinerama" | 31 | PACKAGECONFIG[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 |