diff options
| author | Gyorgy Sarvari <skandigraun@gmail.com> | 2025-09-11 09:37:15 +0200 |
|---|---|---|
| committer | Gyorgy Sarvari <skandigraun@gmail.com> | 2025-09-11 10:15:25 +0200 |
| commit | d19863532692c9aeb965d1e5e3e17775ab9ee9f6 (patch) | |
| tree | bffe416c11909ded79bea95bd1ec3e868a43fa08 | |
| parent | 5e42bce992bc33e790ee153c58c5d5efbebe5b72 (diff) | |
| download | meta-openembedded-d19863532692c9aeb965d1e5e3e17775ab9ee9f6.tar.gz | |
metacity: fix compilation on 32-bit systems
On 32-bit targets the compilation fails with the following error:
| ../../metacity-3.52.0/src/core/screen.c:2431:55: error: passing argument 2 of 'sn_startup_sequence_get_last_active_time' from incompatible pointer type [-Wincompatible-pointer-types]
| 2431 | sn_startup_sequence_get_last_active_time (sequence, &tv_sec, &tv_usec);
| | ^~~~~~~
| | |
| | long int *
Backport patch from upstream to address this problem.
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
| -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 |
