Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package wofi for openSUSE:Factory checked in at 2026-01-08 15:31:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/wofi (Old) and /work/SRC/openSUSE:Factory/.wofi.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wofi" Thu Jan 8 15:31:30 2026 rev:9 rq:1325927 version:1.5.3 Changes: -------- --- /work/SRC/openSUSE:Factory/wofi/wofi.changes 2025-08-18 16:08:55.924619219 +0200 +++ /work/SRC/openSUSE:Factory/.wofi.new.1928/wofi.changes 2026-01-08 15:31:37.131559417 +0100 @@ -1,0 +2,14 @@ +Thu Jan 8 09:42:08 UTC 2026 - Jan Baier <[email protected]> + +- Update to 1.5.3: + * Added support for loading configs and styling from /usr/etc/wofi and /etc/wofi, plugins can now be loaded from /usr/lib/wofi and /lib/wofi + * Fixed --lines when using a horizontal layout + * The size of the scrolled window is now handled correctly while preserving the behavior of --lines + * Backed out changeset a40edf527046 + * footclient now comes after foot in the terminal order rather than at the end, this matches the documentation + * Amended the terminal_fix patch to use tabs and g_desktop_app_info_get_boolean() + * Added drun-terminal_fix + * Added title documentation to wofi(5) + * Add --title/-T option + +------------------------------------------------------------------- Old: ---- v1.5.1.tar.gz New: ---- v1.5.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ wofi.spec ++++++ --- /var/tmp/diff_new_pack.SU4T3w/_old 2026-01-08 15:31:37.759585578 +0100 +++ /var/tmp/diff_new_pack.SU4T3w/_new 2026-01-08 15:31:37.763585744 +0100 @@ -1,7 +1,7 @@ # # spec file for package wofi # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: wofi -Version: 1.5.1 +Version: 1.5.3 Release: 0 Summary: Launcher for wlroots compositors License: GPL-3.0-only ++++++ v1.5.1.tar.gz -> v1.5.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/.hg_archival.txt new/wofi-v1.5.3/.hg_archival.txt --- old/wofi-v1.5.1/.hg_archival.txt 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/.hg_archival.txt 2026-01-06 07:20:21.000000000 +0100 @@ -1,4 +1,4 @@ repo: 1c71dcd9c6a6dd54601820ce069e7c3ed7e946ca -node: fa80dc83c18c63f06bc42599436c90ae9e12c844 +node: b85063f5d38b0082dbf4df8e9c4e9c39ab049ab0 branch: default -tag: v1.5.1 +tag: v1.5.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/.hgtags new/wofi-v1.5.3/.hgtags --- old/wofi-v1.5.1/.hgtags 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/.hgtags 2026-01-06 07:20:21.000000000 +0100 @@ -11,3 +11,5 @@ eab2b31e805564012e4f71920a8f87ba5f9f798c v1.4 1e89e8a94806ef2dd27dbf79b4fcc9902f89c422 v1.4.1 7373d243116703780ba88d32d635a05ffa2177b7 v1.5 +fa80dc83c18c63f06bc42599436c90ae9e12c844 v1.5.1 +5511c896a4676de7865c7f462fba5fe94910a98a v1.5.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/inc/wofi.h new/wofi-v1.5.3/inc/wofi.h --- old/wofi-v1.5.1/inc/wofi.h 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/inc/wofi.h 2026-01-06 07:20:21.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019-2020 Scoopta + * Copyright (C) 2019-2025 Scoopta * This file is part of Wofi * Wofi is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,5 +41,5 @@ void wofi_init(struct map* config); -void wofi_load_css(bool nyan); +void wofi_load_css(bool nyan, const char* stylesheet); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/man/wofi.1 new/wofi-v1.5.3/man/wofi.1 --- old/wofi-v1.5.1/man/wofi.1 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/man/wofi.1 2026-01-06 07:20:21.000000000 +0100 @@ -125,15 +125,17 @@ .SH CONFIGURATION Wofi has 3 main files used for configuration. All files are completely optional. .IP 1. 4 -The config file which defaults to $XDG_CONFIG_HOME/wofi/config. +The config file which defaults to /usr/etc/wofi/config, followed by /etc/wofi/config, and then finally $XDG_CONFIG_HOME/wofi/config. These are loaded in order in a layered fashion where each applies on top of the previous. .IP 2. 4 -The CSS file which defaults to $XDG_CONFIG_HOME/wofi/style.css. +The CSS file which defaults to /usr/etc/wofi/style.css, followed by /etc/wofi/style.css, and then finally $XDG_CONFIG_HOME/wofi/style.css. These are loaded in order in a layered fashion where each applies on top of the previous. .IP 3. 4 The colors file which defaults to the pywal cache $XDG_CACHE_HOME/wal/colors. .P All 3 of these paths can be manually specified using the respective command line flag. In the case of the last 2 they can additionally be specified in the config file. +When manually specified paths are used nothing is loaded from the $XDG_CONFIG_HOME location, however the system wide files are still loaded first. + In the event $XDG_CONFIG_HOME is not specified it defaults to ~/.config likewise if $XDG_CACHE_HOME is not specified it defaults to ~/.cache. Information about the formats for these files can be found in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/man/wofi.3 new/wofi-v1.5.3/man/wofi.3 --- old/wofi-v1.5.1/man/wofi.3 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/man/wofi.3 2026-01-06 07:20:21.000000000 +0100 @@ -3,7 +3,9 @@ wofi \- Mode functions and documentation .SH DESCRIPTION -Wofi provides a C API which can be used for developing 3rd party modes. These modes should be compiled to a shared object which should be placed in $XDG_CONFIG_HOME/wofi/plugins. If $XDG_CONFIG_HOME is not defined then it will default to ~/.config. +Wofi provides a C API which can be used for developing 3rd party modes. These modes should be compiled to a shared object which should be placed in $XDG_CONFIG_HOME/wofi/plugins, /lib/wofi/plugins, or /usr/lib/wofi/plugins. If $XDG_CONFIG_HOME is not defined then it will default to ~/.config. + +The shared objects will be loaded from the paths in the order specified above, wofi will stop searching once it finds a plugin with the name in question. For example if a plugin called libtest.so exists in $XDG_CONFIG_HOME it will mask one called libtest.so in /lib. It is very important to note that this API is not stable. It's mostly stable however if something comes up that requires a substantial change things will be changed. This shouldn't happen too much but has happened in the past and might in the future. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/meson.build new/wofi-v1.5.3/meson.build --- old/wofi-v1.5.1/meson.build 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/meson.build 2026-01-06 07:20:21.000000000 +0100 @@ -1,4 +1,4 @@ -project('wofi', 'c', version : 'v1.5.1', default_options : ['c_std=c99', 'buildtype=release', 'warning_level=2']) +project('wofi', 'c', version : 'v1.5.3', default_options : ['c_std=c99', 'buildtype=release', 'warning_level=2']) cc = meson.get_compiler('c') pkgcfg = import('pkgconfig') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/src/main.c new/wofi-v1.5.3/src/main.c --- old/wofi-v1.5.1/src/main.c 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/src/main.c 2026-01-06 07:20:21.000000000 +0100 @@ -33,6 +33,12 @@ #include <gtk/gtk.h> +#define USR_CONFIG_LOCATION "/usr/etc/wofi/config" +#define SYS_CONFIG_LOCATION "/etc/wofi/config" + +#define USR_STYLE_LOCATION "/usr/etc/wofi/style.css" +#define SYS_STYLE_LOCATION "/etc/wofi/style.css" + static const char* nyan_colors[] = {"#FF0000", "#FFA500", "#FFFF00", "#00FF00", "#0000FF", "#FF00FF"}; static size_t nyan_color_l = sizeof(nyan_colors) / sizeof(char*); @@ -102,7 +108,7 @@ exit(0); } -void wofi_load_css(bool nyan) { +void wofi_load_css(bool nyan, const char* stylesheet) { if(access(stylesheet, R_OK) == 0) { FILE* file = fopen(stylesheet, "r"); fseek(file, 0, SEEK_END); @@ -635,6 +641,12 @@ } else { config_path = strdup(config_str); } + if(access(USR_CONFIG_LOCATION, R_OK) == 0) { + config_load(config, USR_CONFIG_LOCATION); + } + if(access(SYS_CONFIG_LOCATION, R_OK) == 0) { + config_load(config, SYS_CONFIG_LOCATION); + } if(access(config_path, R_OK) == 0) { config_load(config, config_path); } @@ -661,6 +673,8 @@ stylesheet = strdup(style_str); } + map_put(config, "style", stylesheet); + if(color_str == NULL) { color_str = map_get(config, "color"); } @@ -818,7 +832,9 @@ g_object_set(gtk_settings_get_default(), "gtk-application-prefer-dark-theme", TRUE, NULL); } - wofi_load_css(false); + wofi_load_css(false, USR_STYLE_LOCATION); + wofi_load_css(false, SYS_STYLE_LOCATION); + wofi_load_css(false, stylesheet); wofi_init(config); gtk_main(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wofi-v1.5.1/src/wofi.c new/wofi-v1.5.3/src/wofi.c --- old/wofi-v1.5.1/src/wofi.c 2025-07-31 06:23:40.000000000 +0200 +++ new/wofi-v1.5.3/src/wofi.c 2026-01-06 07:20:21.000000000 +0100 @@ -45,6 +45,9 @@ #define _UNUSED(x) (void)(x) #define CUSTOM_KEY_NUMBER 20 +#define USR_PLUGIN_LOCATION "/usr/lib/wofi" +#define SYS_PLUGIN_LOCATION "/lib/wofi" + static const char* terminals[] = {"kitty", "alacritty", "wezterm", "foot", "termite", "gnome-terminal", "weston-terminal"}; enum location { @@ -111,6 +114,7 @@ static bool pre_display_exec = false; static bool single_click = false; static bool hide_search = false; +static char* stylesheet = NULL; static GdkModifierType shift_mask = GDK_SHIFT_MASK; static GdkModifierType ctrl_mask = GDK_CONTROL_MASK; static GdkModifierType alt_mask = GDK_MOD1_MASK; @@ -572,12 +576,45 @@ } static void update_surface_size(void) { + int64_t scroll_width = 0; + int64_t scroll_height = 0; if(lines > 0) { - height = max_height * lines; + scroll_height = max_height * lines; } - if(width == 0 || height == 0) { + if(width == 0 || (height == 0 && scroll_height == 0)) { return; } + + GtkAllocation alloc; + gtk_widget_get_allocated_size(entry, &alloc, NULL); + if(outer_orientation == GTK_ORIENTATION_HORIZONTAL) { + if(alloc.width > 0) { + scroll_width = width - alloc.width; + if(lines > 0) { + height = scroll_height; + } else { + scroll_height = height; + } + + if(scroll_width < 0) { + scroll_width = width; + } + } + } else { + if(alloc.height > 0) { + scroll_width = width; + if(lines > 0) { + height = scroll_height + alloc.height; + } else { + scroll_height = height - alloc.height; + } + + if(scroll_height < 0) { + scroll_height = height; + } + } + } + if(shell != NULL) { zwlr_layer_surface_v1_set_size(wlr_surface, width, height); wl_surface_commit(wl_surface); @@ -585,7 +622,8 @@ } gtk_window_resize(GTK_WINDOW(window), width, height); - gtk_widget_set_size_request(scroll, width, height); + + gtk_widget_set_size_request(scroll, scroll_width, scroll_height); } static void widget_allocate(GtkWidget* widget, GdkRectangle* allocation, gpointer data) { @@ -1373,7 +1411,7 @@ static gboolean do_nyan(gpointer data) { (void) data; - wofi_load_css(true); + wofi_load_css(true, stylesheet); return G_SOURCE_CONTINUE; } @@ -1537,7 +1575,7 @@ return proc; } -static void* load_mode(char* _mode, char* name, struct mode* mode_ptr, struct map* props) { +static void* load_mode(char* _mode, char* name, struct mode* mode_ptr, struct map* props, const char* config_dir) { char* dso = strstr(_mode, ".so"); mode_ptr->name = strdup(name); @@ -1599,7 +1637,7 @@ static struct mode* add_mode(char* _mode) { struct mode* mode_ptr = calloc(1, sizeof(struct mode)); struct map* props = map_init(); - void (*init)(struct mode* _mode, struct map* props) = load_mode(_mode, _mode, mode_ptr, props); + void (*init)(struct mode* _mode, struct map* props) = load_mode(_mode, _mode, mode_ptr, props, config_dir); if(init == NULL) { free(mode_ptr->name); @@ -1611,7 +1649,13 @@ props = map_init(); char* name = utils_concat(3, "lib", _mode, ".so"); - init = load_mode(name, _mode, mode_ptr, props); + init = load_mode(name, _mode, mode_ptr, props, config_dir); + if(init == NULL) { + init = load_mode(name, _mode, mode_ptr, props, SYS_PLUGIN_LOCATION); + } + if(init == NULL) { + init = load_mode(name, _mode, mode_ptr, props, USR_PLUGIN_LOCATION); + } free(name); if(init == NULL) { @@ -1623,7 +1667,7 @@ mode_ptr = calloc(1, sizeof(struct mode)); props = map_init(); - init = load_mode("external", _mode, mode_ptr, props); + init = load_mode("external", _mode, mode_ptr, props, config_dir); map_put(props, "exec", _mode); @@ -1826,6 +1870,7 @@ pre_display_cmd = map_get(config, "pre_display_cmd"); pre_display_exec = strcmp(config_get(config, "pre_display_exec", "false"), "true") == 0; single_click = strcmp(config_get(config, "single_click", "false"), "true") == 0; + stylesheet = config_get(config, "style", NULL); keys = map_init_void(); mods = map_init_void();
