Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package budgie-session for openSUSE:Factory checked in at 2026-06-25 10:51:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/budgie-session (Old) and /work/SRC/openSUSE:Factory/.budgie-session.new.2088 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "budgie-session" Thu Jun 25 10:51:48 2026 rev:2 rq:1361465 version:1.0.0+0 Changes: -------- --- /work/SRC/openSUSE:Factory/budgie-session/budgie-session.changes 2024-02-04 19:07:26.916818515 +0100 +++ /work/SRC/openSUSE:Factory/.budgie-session.new.2088/budgie-session.changes 2026-06-25 10:56:01.614933702 +0200 @@ -1,0 +2,13 @@ +Sat Jan 24 21:35:21 UTC 2026 - Callum Farmer <[email protected]> + +- Update to version 1.0.0+0: + * Bump for stable release + * Bump release to 1.0.0-preview.2 + * budgie-desktop Autostartfolder (#8) + * Bump meson version for preview 1 + * Add a wayland compositor check executable used to test if a wayland compositor is started; primarily for wlroot based compositors where we cannot depend on the wayland-socket being set at the end of the compositor startup + * Cleanup using gint rather than int; add more explanatory comments + * Support X-GNOME-Autostart-Delay for autostart apps - Closes #3 + * do not fail whale: prevents otherwise usable wayland session + +------------------------------------------------------------------- Old: ---- budgie-session-0.9.1.obscpio New: ---- budgie-session-1.0.0+0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ budgie-session.spec ++++++ --- /var/tmp/diff_new_pack.xhOqOW/_old 2026-06-25 10:56:02.726972049 +0200 +++ /var/tmp/diff_new_pack.xhOqOW/_new 2026-06-25 10:56:02.726972049 +0200 @@ -1,7 +1,7 @@ # # spec file for package budgie-session # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # Copyright (c) 2024 Callum Farmer <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -16,19 +16,20 @@ # Please submit bugfixes or comments via https://bugs.opensuse.org/ # -%define major_ver 0 + +%define major_ver 1 Name: budgie-session -Version: 0.9.1 +Version: 1.0.0+0 Release: 0 Summary: Fork of gnome-session License: GPL-2.0-or-later Group: System/GUI/Other URL: https://github.com/BuddiesOfBudgie/budgie-session Source0: %{name}-%{version}.tar.xz -BuildRequires: meson -BuildRequires: pkgconfig BuildRequires: docbook-xsl-stylesheets BuildRequires: fdupes +BuildRequires: meson +BuildRequires: pkgconfig BuildRequires: xsltproc BuildRequires: pkgconfig(egl) BuildRequires: pkgconfig(epoxy) @@ -64,7 +65,6 @@ %meson \ -D docbook=false \ -D systemduserunitdir=%{_userunitdir} \ - --libexecdir=%{_libexecdir}/%{name} \ %{nil} %meson_build @@ -76,7 +76,7 @@ %{_bindir}/budgie-session %{_bindir}/budgie-session-inhibit %{_bindir}/budgie-session-quit -%{_libexecdir}/%{name} +%{_libexecdir}/budgie-session* %{_datadir}/%{name} %{_datadir}/glib-2.0/schemas/org.buddiesofbudgie.SessionManager.gschema.xml %{_mandir}/man1/budgie-session.1%{?ext_man} ++++++ _service ++++++ --- /var/tmp/diff_new_pack.xhOqOW/_old 2026-06-25 10:56:02.758973154 +0200 +++ /var/tmp/diff_new_pack.xhOqOW/_new 2026-06-25 10:56:02.762973291 +0200 @@ -2,9 +2,9 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://github.com/BuddiesOfBudgie/budgie-session.git</param> - <param name="revision">41e4a521fd737921f0fe5e0ef503377896c2aa76</param> + <param name="revision">9edd901a6225bf7762faa709b6b2554fa538f766</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> - <param name="versionrewrite-pattern">v?(.*)\+0</param> + <param name="versionrewrite-pattern">v?(.*)</param> <param name="changesgenerate">enable</param> </service> <service name="tar" mode="buildtime"/> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.xhOqOW/_old 2026-06-25 10:56:02.798974532 +0200 +++ /var/tmp/diff_new_pack.xhOqOW/_new 2026-06-25 10:56:02.802974671 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/BuddiesOfBudgie/budgie-session.git</param> - <param name="changesrevision">41e4a521fd737921f0fe5e0ef503377896c2aa76</param></service></servicedata> + <param name="changesrevision">9edd901a6225bf7762faa709b6b2554fa538f766</param></service></servicedata> (No newline at EOF) ++++++ budgie-session-0.9.1.obscpio -> budgie-session-1.0.0+0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/gnome-session/gsm-app.c new/budgie-session-1.0.0+0/gnome-session/gsm-app.c --- old/budgie-session-0.9.1/gnome-session/gsm-app.c 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/gnome-session/gsm-app.c 2026-01-10 20:48:02.000000000 +0100 @@ -327,6 +327,7 @@ klass->impl_provides = NULL; klass->impl_get_provides = NULL; klass->impl_is_running = NULL; + klass->impl_peek_autostart_delay = NULL; g_object_class_install_property (object_class, PROP_PHASE, @@ -536,7 +537,22 @@ gsm_app_stop (GsmApp *app, GError **error) { - return GSM_APP_GET_CLASS (app)->impl_stop (app, error); + if (gsm_app_is_running (app)) + return GSM_APP_GET_CLASS (app)->impl_stop (app, error); + + return TRUE; +} + +int +gsm_app_peek_autostart_delay (GsmApp *app) +{ + g_return_val_if_fail (GSM_IS_APP (app), FALSE); + + if (GSM_APP_GET_CLASS (app)->impl_peek_autostart_delay) { + return GSM_APP_GET_CLASS (app)->impl_peek_autostart_delay (app); + } else { + return 0; + } } void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/gnome-session/gsm-app.h new/budgie-session-1.0.0+0/gnome-session/gsm-app.h --- old/budgie-session-0.9.1/gnome-session/gsm-app.h 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/gnome-session/gsm-app.h 2026-01-10 20:48:02.000000000 +0100 @@ -49,6 +49,7 @@ GError **error); gboolean (*impl_stop) (GsmApp *app, GError **error); + gint (*impl_peek_autostart_delay) (GsmApp *app); gboolean (*impl_provides) (GsmApp *app, const char *service); char ** (*impl_get_provides) (GsmApp *app); @@ -109,6 +110,7 @@ gboolean gsm_app_get_registered (GsmApp *app); void gsm_app_set_registered (GsmApp *app, gboolean registered); +int gsm_app_peek_autostart_delay (GsmApp *app); gboolean gsm_app_save_to_keyfile (GsmApp *app, GKeyFile *keyfile, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/gnome-session/gsm-autostart-app.c new/budgie-session-1.0.0+0/gnome-session/gsm-autostart-app.c --- old/budgie-session-0.9.1/gnome-session/gsm-autostart-app.c 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/gnome-session/gsm-autostart-app.c 2026-01-10 20:48:02.000000000 +0100 @@ -20,6 +20,7 @@ #include <config.h> #include <ctype.h> +#include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <errno.h> @@ -73,6 +74,7 @@ char *condition_string; gboolean condition; gboolean autorestart; + int autostart_delay; GFileMonitor *condition_monitor; guint condition_notify_id; @@ -111,6 +113,7 @@ priv->pid = -1; priv->condition_monitor = NULL; priv->condition = FALSE; + priv->autostart_delay = -1; } static gboolean @@ -617,6 +620,21 @@ "AutostartCondition"); setup_condition_monitor (app); + const char *delay; + delay = g_desktop_app_info_get_string (priv->app_info, + GSM_AUTOSTART_APP_DELAY_KEY); + + if (delay != NULL) { + priv->autostart_delay = strtol (delay, NULL, 10); + + if (priv->autostart_delay < 0) { + g_warning ("Invalid autostart delay of %d for %s", + priv->autostart_delay, + gsm_app_peek_id (GSM_APP (app))); + priv->autostart_delay = -1; + } + } + g_object_set (app, "phase", phase, "startup-id", startup_id, @@ -1352,6 +1370,14 @@ return g_app_info_get_id (G_APP_INFO (priv->app_info)); } +static int +gsm_autostart_app_peek_autostart_delay (GsmApp *app) +{ + GsmAutostartAppPrivate *priv = gsm_autostart_app_get_instance_private (GSM_AUTOSTART_APP (app)); + + return priv->autostart_delay; +} + static gboolean gsm_autostart_app_initable_init (GInitable *initable, GCancellable *cancellable, @@ -1472,6 +1498,7 @@ app_class->impl_has_autostart_condition = gsm_autostart_app_has_autostart_condition; app_class->impl_get_app_id = gsm_autostart_app_get_app_id; app_class->impl_get_autorestart = gsm_autostart_app_get_autorestart; + app_class->impl_peek_autostart_delay = gsm_autostart_app_peek_autostart_delay; app_class->impl_save_to_keyfile = gsm_autostart_app_save_to_keyfile; props[PROP_DESKTOP_FILENAME] = diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/gnome-session/gsm-autostart-app.h new/budgie-session-1.0.0+0/gnome-session/gsm-autostart-app.h --- old/budgie-session-0.9.1/gnome-session/gsm-autostart-app.h 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/gnome-session/gsm-autostart-app.h 2026-01-10 20:48:02.000000000 +0100 @@ -55,6 +55,7 @@ #define GSM_AUTOSTART_APP_DBUS_PATH_KEY "X-GNOME-DBus-Path" #define GSM_AUTOSTART_APP_DBUS_ARGS_KEY "X-GNOME-DBus-Start-Arguments" #define GSM_AUTOSTART_APP_DISCARD_KEY "X-GNOME-Autostart-discard-exec" +#define GSM_AUTOSTART_APP_DELAY_KEY "X-GNOME-Autostart-Delay" G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/gnome-session/gsm-manager.c new/budgie-session-1.0.0+0/gnome-session/gsm-manager.c --- old/budgie-session-0.9.1/gnome-session/gsm-manager.c 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/gnome-session/gsm-manager.c 2026-01-10 20:48:02.000000000 +0100 @@ -291,9 +291,10 @@ NULL); #endif - gsm_fail_whale_dialog_we_failed (FALSE, + /*gsm_fail_whale_dialog_we_failed (FALSE, allow_logout, extensions); + */ } static void @@ -415,7 +416,8 @@ } else { g_debug ("GsmManager: stopping app %s", gsm_app_peek_id (app)); - /* If we don't have a client then we should try to kill the app */ + /* If we don't have a client then we should try to kill the app , + * if it is running */ error = NULL; res = gsm_app_stop (app, &error); if (! res) { @@ -755,11 +757,40 @@ return FALSE; } +/* + Note - app requires to be passed by reference to be used; its cleaned up before exit +*/ +static gboolean +_autostart_delay_timeout (GsmApp *app) +{ + GError *error = NULL; + gboolean res; + + if (!gsm_app_peek_is_disabled (app) + && !gsm_app_peek_is_conditionally_disabled (app)) { + res = gsm_app_start (app, &error); + if (!res) { + if (error != NULL) { + g_warning ("Could not launch application '%s': %s", + gsm_app_peek_app_id (app), + error->message); + g_error_free (error); + } + } + } + + /* we unref here since we ref this on the initial call*/ + g_object_unref (app); + + return FALSE; +} + static gboolean _start_app (const char *id, GsmApp *app, GsmManager *manager) { + int delay; GsmManagerPrivate *priv = gsm_manager_get_instance_private (manager); if (gsm_app_peek_phase (app) != priv->phase) { @@ -779,6 +810,18 @@ goto out; } + /* Only accept an autostart delay for the application phase */ + if (priv->phase == GSM_MANAGER_PHASE_APPLICATION) { + delay = gsm_app_peek_autostart_delay (app); + if (delay > 0) { + g_timeout_add_seconds (delay, + (GSourceFunc)_autostart_delay_timeout, + g_object_ref (app)); + g_debug ("GsmManager: %s is scheduled to start in %d seconds", id, delay); + goto out; + } + } + if (!start_app_or_warn (manager, app)) goto out; @@ -1464,11 +1507,12 @@ return FALSE; } - g_debug ("GsmManager:\tID: %s\tapp-id:%s\tis-disabled:%d\tis-conditionally-disabled:%d", + g_debug ("GsmManager:\tID: %s\tapp-id:%s\tis-disabled:%d\tis-conditionally-disabled:%d\tis-delayed:%d", gsm_app_peek_id (app), gsm_app_peek_app_id (app), gsm_app_peek_is_disabled (app), - gsm_app_peek_is_conditionally_disabled (app)); + gsm_app_peek_is_conditionally_disabled (app), + (gsm_app_peek_autostart_delay (app) > 0)); return FALSE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/gnome-session/gsm-util.c new/budgie-session-1.0.0+0/gnome-session/gsm-util.c --- old/budgie-session-0.9.1/gnome-session/gsm-util.c 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/gnome-session/gsm-util.c 2026-01-10 20:48:02.000000000 +0100 @@ -248,7 +248,7 @@ for (i = 0; system_data_dirs[i]; i++) { g_ptr_array_add (dirs, g_build_filename (system_data_dirs[i], - "gnome", "autostart", NULL)); + "budgie-desktop", "autostart", NULL)); } system_config_dirs = g_get_system_config_dirs (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/gnome-session/main.c new/budgie-session-1.0.0+0/gnome-session/main.c --- old/budgie-session-0.9.1/gnome-session/main.c 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/gnome-session/main.c 2026-01-10 20:48:02.000000000 +0100 @@ -87,7 +87,7 @@ gsm_quit (); else { g_warning ("Lost name on bus: %s", name); - gsm_fail_whale_dialog_we_failed (TRUE, TRUE, NULL); + //gsm_fail_whale_dialog_we_failed (TRUE, TRUE, NULL); } } else { g_debug ("Calling name lost callback function"); @@ -166,7 +166,7 @@ } if (!gsm_session_fill (manager, session_name)) { - gsm_fail_whale_dialog_we_failed (FALSE, TRUE, NULL); + //gsm_fail_whale_dialog_we_failed (FALSE, TRUE, NULL); } _gsm_manager_set_renderer (manager, gl_renderer); @@ -204,7 +204,7 @@ return TRUE; /* Just a sanity check to prevent infinite recursion if - * dbus-launch fails to set DBUS_SESSION_BUS_ADDRESS + * dbus-launch fails to set DBUS_SESSION_BUS_ADDRESS */ g_return_val_if_fail (!g_str_has_prefix (argv[0], "dbus-launch"), TRUE); @@ -218,9 +218,9 @@ new_argv[i + 2] = argv[i]; } new_argv[i + 2] = NULL; - + if (!execvp ("dbus-launch", new_argv)) { - g_set_error (error, + g_set_error (error, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED, "No session bus and could not exec dbus-launch: %s", @@ -509,13 +509,13 @@ } if (gl_failed) { - gsm_fail_whale_dialog_we_failed (FALSE, TRUE, NULL); + //gsm_fail_whale_dialog_we_failed (FALSE, TRUE, NULL); gsm_main (); exit (1); } if (please_fail) { - gsm_fail_whale_dialog_we_failed (TRUE, TRUE, NULL); + //gsm_fail_whale_dialog_we_failed (TRUE, TRUE, NULL); gsm_main (); exit (1); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/meson.build new/budgie-session-1.0.0+0/meson.build --- old/budgie-session-0.9.1/meson.build 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/meson.build 2026-01-10 20:48:02.000000000 +0100 @@ -1,6 +1,6 @@ project( 'budgie-session', 'c', - version: '0.9.1', + version: '1.0.0', license: 'GPL2+', default_options: 'buildtype=debugoptimized', meson_version: '>= 0.58.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/scripts/mkRelease.sh new/budgie-session-1.0.0+0/scripts/mkRelease.sh --- old/budgie-session-0.9.1/scripts/mkRelease.sh 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/scripts/mkRelease.sh 2026-01-10 20:48:02.000000000 +0100 @@ -12,4 +12,4 @@ mv build/meson-dist/$TAR $VTAR gpg --armor --detach-sign $VTAR -gpg --verify "${VTAR}.asc" \ No newline at end of file +gpg --verify "${VTAR}.asc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/tools/gnome-session-compositor-ready.c new/budgie-session-1.0.0+0/tools/gnome-session-compositor-ready.c --- old/budgie-session-0.9.1/tools/gnome-session-compositor-ready.c 1970-01-01 01:00:00.000000000 +0100 +++ new/budgie-session-1.0.0+0/tools/gnome-session-compositor-ready.c 2026-01-10 20:48:02.000000000 +0100 @@ -0,0 +1,96 @@ +/* + * This file is part of budgie-session. + * + * Copyright Budgie Desktop Developers + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include <wayland-client.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <stdbool.h> +#include <time.h> + +static bool have_compositor = false; +static bool have_seat = false; +static bool have_xdg_wm_base = false; + +static void handle_global(void *data, + struct wl_registry *registry, + uint32_t name, + const char *interface, + uint32_t version) { + if (strcmp(interface, "wl_compositor") == 0) { + have_compositor = true; + printf("✅ Found wl_compositor\n"); + } else if (strcmp(interface, "wl_seat") == 0) { + have_seat = true; + printf("✅ Found wl_seat\n"); + } else if (strcmp(interface, "xdg_wm_base") == 0) { + have_xdg_wm_base = true; + printf("✅ Found xdg_wm_base\n"); + } +} + +static void handle_global_remove(void *data, + struct wl_registry *registry, + uint32_t name) { + // Nothing needed here for readiness check +} + +static const struct wl_registry_listener registry_listener = { + .global = handle_global, + .global_remove = handle_global_remove, +}; + +int main(int argc, char *argv[]) { + struct wl_display *display = wl_display_connect(NULL); + if (!display) { + fprintf(stderr, "❌ Failed to connect to Wayland display\n"); + return 1; + } + + struct wl_registry *registry = wl_display_get_registry(display); + if (!registry) { + fprintf(stderr, "❌ Failed to get Wayland registry\n"); + wl_display_disconnect(display); + return 1; + } + + wl_registry_add_listener(registry, ®istry_listener, NULL); + + // Roundtrip once to get initial globals + wl_display_roundtrip(display); + + // Poll until we have everything or timeout + const int timeout_sec = 30; + time_t start = time(NULL); + + while (!(have_compositor && have_seat && have_xdg_wm_base)) { + if (time(NULL) - start > timeout_sec) { + fprintf(stderr, "❌ Timeout waiting for compositor readiness\n"); + wl_display_disconnect(display); + return 2; + } + wl_display_dispatch(display); + } + + printf("🎉 Compositor is fully initialized!\n"); + wl_display_disconnect(display); + return 0; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/budgie-session-0.9.1/tools/meson.build new/budgie-session-1.0.0+0/tools/meson.build --- old/budgie-session-0.9.1/tools/meson.build 2024-01-04 22:31:40.000000000 +0100 +++ new/budgie-session-1.0.0+0/tools/meson.build 2026-01-10 20:48:02.000000000 +0100 @@ -11,6 +11,10 @@ ['gnome-session-inhibit', session_deps, cflags, session_bindir] ] +wayland_deps = [dependency('wayland-client')] +programs += [['gnome-session-compositor-ready', wayland_deps, cflags, session_libexecdir]] + + if enable_systemd_session programs += [['gnome-session-ctl', session_bin_deps, cflags, session_libexecdir]] endif ++++++ budgie-session.obsinfo ++++++ --- /var/tmp/diff_new_pack.xhOqOW/_old 2026-06-25 10:56:03.242989844 +0200 +++ /var/tmp/diff_new_pack.xhOqOW/_new 2026-06-25 10:56:03.246989982 +0200 @@ -1,5 +1,5 @@ name: budgie-session -version: 0.9.1 -mtime: 1704403900 -commit: 41e4a521fd737921f0fe5e0ef503377896c2aa76 +version: 1.0.0+0 +mtime: 1768074482 +commit: 9edd901a6225bf7762faa709b6b2554fa538f766
