mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-14 17:59:59 +00:00
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>
This commit is contained in:
+188
@@ -0,0 +1,188 @@
|
||||
From 89eecad37d4c5faa7a7cc5c6e23cd11e76157a92 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= <alberts.muktupavels@gmail.com>
|
||||
Date: Sun, 27 Oct 2024 18:20:32 +0200
|
||||
Subject: [PATCH] screen: avoid sn_startup_sequence_get_last_active_time
|
||||
|
||||
startup-notification has change that changes `tv_sec` parameter
|
||||
type from `long` to `time_t` for over 10 years but there has not
|
||||
been new release.
|
||||
|
||||
`get_last_active_time` returns same time as `get_initiated_time`
|
||||
which is simply time when startup was initiated. To avoid potential
|
||||
problems using wrong type we can just stop using related function
|
||||
and record initiation time ourselves.
|
||||
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/metacity/-/commit/89eecad37d4c5faa7a7cc5c6e23cd11e76157a92]
|
||||
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
|
||||
---
|
||||
src/core/screen.c | 84 ++++++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 69 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/core/screen.c b/src/core/screen.c
|
||||
index 495222f5..e79b54fb 100644
|
||||
--- a/src/core/screen.c
|
||||
+++ b/src/core/screen.c
|
||||
@@ -143,6 +143,34 @@ set_wm_icon_size_hint (MetaScreen *screen)
|
||||
#undef N_VALS
|
||||
}
|
||||
|
||||
+typedef struct
|
||||
+{
|
||||
+ SnStartupSequence *sequence;
|
||||
+ int64_t time;
|
||||
+} MetaStartupSequence;
|
||||
+
|
||||
+static MetaStartupSequence *
|
||||
+meta_startup_sequence_new (SnStartupSequence *sequence)
|
||||
+{
|
||||
+ MetaStartupSequence *self;
|
||||
+
|
||||
+ self = g_new0 (MetaStartupSequence, 1);
|
||||
+
|
||||
+ self->sequence = sequence;
|
||||
+ self->time = g_get_real_time ();
|
||||
+
|
||||
+ sn_startup_sequence_ref (sequence);
|
||||
+
|
||||
+ return self;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+meta_startup_sequence_free (MetaStartupSequence *self)
|
||||
+{
|
||||
+ g_clear_pointer (&self->sequence, sn_startup_sequence_unref);
|
||||
+ g_free (self);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
reload_monitor_infos (MetaScreen *screen)
|
||||
{
|
||||
@@ -543,7 +543,7 @@
|
||||
meta_screen_ungrab_keys (screen);
|
||||
|
||||
#ifdef HAVE_STARTUP_NOTIFICATION
|
||||
- g_slist_free_full (screen->startup_sequences, (GDestroyNotify) sn_startup_sequence_unref);
|
||||
+ g_slist_free_full (screen->startup_sequences, (GDestroyNotify) meta_startup_sequence_free);
|
||||
screen->startup_sequences = NULL;
|
||||
|
||||
if (screen->startup_sequence_timeout != 0)
|
||||
@@ -2366,12 +2394,15 @@ static void
|
||||
add_sequence (MetaScreen *screen,
|
||||
SnStartupSequence *sequence)
|
||||
{
|
||||
+ MetaStartupSequence *meta_sequence;
|
||||
+
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Adding sequence %s\n",
|
||||
sn_startup_sequence_get_id (sequence));
|
||||
- sn_startup_sequence_ref (sequence);
|
||||
+
|
||||
+ meta_sequence = meta_startup_sequence_new (sequence);
|
||||
screen->startup_sequences = g_slist_prepend (screen->startup_sequences,
|
||||
- sequence);
|
||||
+ meta_sequence);
|
||||
|
||||
/* our timeout just polls every second, instead of bothering
|
||||
* to compute exactly when we may next time out
|
||||
@@ -2384,17 +2415,38 @@ add_sequence (MetaScreen *screen,
|
||||
update_startup_feedback (screen);
|
||||
}
|
||||
|
||||
+static int
|
||||
+find_sequence_func (gconstpointer a,
|
||||
+ gconstpointer b)
|
||||
+{
|
||||
+ MetaStartupSequence *meta_sequence;
|
||||
+ SnStartupSequence *sequence;
|
||||
+
|
||||
+ meta_sequence = (MetaStartupSequence *) a;
|
||||
+ sequence = (SnStartupSequence *) b;
|
||||
+
|
||||
+ if (meta_sequence->sequence == sequence)
|
||||
+ return 0;
|
||||
+
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
remove_sequence (MetaScreen *screen,
|
||||
SnStartupSequence *sequence)
|
||||
{
|
||||
+ GSList *l;
|
||||
+
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Removing sequence %s\n",
|
||||
sn_startup_sequence_get_id (sequence));
|
||||
|
||||
- screen->startup_sequences = g_slist_remove (screen->startup_sequences,
|
||||
- sequence);
|
||||
- sn_startup_sequence_unref (sequence);
|
||||
+ l = g_slist_find_custom (screen->startup_sequences,
|
||||
+ sequence,
|
||||
+ find_sequence_func);
|
||||
+
|
||||
+ screen->startup_sequences = g_slist_remove_link (screen->startup_sequences, l);
|
||||
+ g_slist_free_full (l, (GDestroyNotify) meta_startup_sequence_free);
|
||||
|
||||
if (screen->startup_sequences == NULL &&
|
||||
screen->startup_sequence_timeout != 0)
|
||||
@@ -2424,13 +2476,11 @@ collect_timed_out_foreach (void *element,
|
||||
void *data)
|
||||
{
|
||||
CollectTimedOutData *ctod = data;
|
||||
- SnStartupSequence *sequence = element;
|
||||
- long tv_sec, tv_usec;
|
||||
+ MetaStartupSequence *meta_sequence = element;
|
||||
+ SnStartupSequence *sequence = meta_sequence->sequence;
|
||||
double elapsed;
|
||||
|
||||
- sn_startup_sequence_get_last_active_time (sequence, &tv_sec, &tv_usec);
|
||||
-
|
||||
- elapsed = (ctod->now - (tv_sec * G_USEC_PER_SEC + tv_usec)) / 1000.0;
|
||||
+ elapsed = (ctod->now - meta_sequence->time) / 1000.0;
|
||||
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Sequence used %g seconds vs. %g max: %s\n",
|
||||
@@ -2572,9 +2622,11 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
|
||||
tmp = screen->startup_sequences;
|
||||
while (tmp != NULL)
|
||||
{
|
||||
+ MetaStartupSequence *meta_sequence;
|
||||
const char *wmclass;
|
||||
|
||||
- wmclass = sn_startup_sequence_get_wmclass (tmp->data);
|
||||
+ meta_sequence = tmp->data;
|
||||
+ wmclass = sn_startup_sequence_get_wmclass (meta_sequence->sequence);
|
||||
|
||||
if (wmclass != NULL &&
|
||||
((window->res_class &&
|
||||
@@ -2582,7 +2634,7 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
|
||||
(window->res_name &&
|
||||
strcmp (wmclass, window->res_name) == 0)))
|
||||
{
|
||||
- sequence = tmp->data;
|
||||
+ sequence = meta_sequence->sequence;
|
||||
|
||||
g_assert (window->startup_id == NULL);
|
||||
window->startup_id = g_strdup (sn_startup_sequence_get_id (sequence));
|
||||
@@ -2614,13 +2666,15 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
|
||||
tmp = screen->startup_sequences;
|
||||
while (tmp != NULL)
|
||||
{
|
||||
+ MetaStartupSequence *meta_sequence;
|
||||
const char *id;
|
||||
|
||||
- id = sn_startup_sequence_get_id (tmp->data);
|
||||
+ meta_sequence = tmp->data;
|
||||
+ id = sn_startup_sequence_get_id (meta_sequence->sequence);
|
||||
|
||||
if (strcmp (id, startup_id) == 0)
|
||||
{
|
||||
- sequence = tmp->data;
|
||||
+ sequence = meta_sequence->sequence;
|
||||
break;
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
@@ -25,7 +25,8 @@ GNOMEBASEBUILDCLASS = "autotools"
|
||||
inherit gnomebase gsettings gettext upstream-version-is-even features_check
|
||||
|
||||
SRC_URI[archive.sha256sum] = "a72438ace6d5903ae79338c6098b1b35ab91c8a97c4323701d3bef1f3eeb191c"
|
||||
SRC_URI += "file://0001-drop-zenity-detection.patch"
|
||||
SRC_URI += "file://0001-drop-zenity-detection.patch \
|
||||
file://screen_avoid_sn_startup_sequence_get_last_active_time.patch"
|
||||
|
||||
PACKAGECONFIG[xinerama] = "--enable-xinerama,--disable-xinerama,libxinerama"
|
||||
# enable as neccessary until new warnings are dealt with
|
||||
|
||||
Reference in New Issue
Block a user