Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gtklock for openSUSE:Factory checked in at 2026-10-29 16:10:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gtklock (Old) and /work/SRC/openSUSE:Factory/.gtklock.new.1255 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gtklock" Thu Oct 29 16:10:58 2026 rev:6 rq:1393590 version:5.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/gtklock/gtklock.changes 2024-10-22 14:53:51.918270710 +0200 +++ /work/SRC/openSUSE:Factory/.gtklock.new.1255/gtklock.changes 2026-10-29 16:12:45.512211266 +0100 @@ -1,0 +2,10 @@ +Thu Oct 29 09:21:01 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 5.0.0: + * Option to execute command on idle timeout #149 + * Preview mode #144 + * Spanish translation #156 + * French translation #150 + * Fix use-after-free when the focused monitor is removed #158 + +------------------------------------------------------------------- Old: ---- gtklock-4.0.0.tar.gz New: ---- gtklock-5.0.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gtklock.spec ++++++ --- /var/tmp/diff_new_pack.fU3K5k/_old 2026-10-29 16:12:46.205240330 +0100 +++ /var/tmp/diff_new_pack.fU3K5k/_new 2026-10-29 16:12:46.208240456 +0100 @@ -1,7 +1,7 @@ # # spec file for package gtklock # -# Copyright (c) 2024 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: gtklock -Version: 4.0.0 +Version: 5.0.0 Release: 0 Summary: GTK-based lockscreen for Wayland License: GPL-3.0-only ++++++ gtklock-4.0.0.tar.gz -> gtklock-5.0.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/README.md new/gtklock-5.0.0/README.md --- old/gtklock-4.0.0/README.md 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/README.md 2026-10-27 22:38:57.000000000 +0100 @@ -1,6 +1,9 @@ # gtklock GTK-based lockscreen for Wayland. +> [!WARNING] +> gtklock is looking for a new maintainer. If you are interested contact me at [email protected] +  ## About gtklock is a lockscreen based on [gtkgreet](https://git.sr.ht/~kennylevinsen/gtkgreet). @@ -35,6 +38,7 @@ - [gtk-session-lock](https://github.com/Cu3PO42/gtk-session-lock) ### Installing build dependencies - Arch: `# pacman -S gcc meson pkgconf scdoc pam wayland gtk3 gtk-session-lock` +- Debian / Ubuntu: `# apt-get install gcc libaudit-dev meson scdoc libpam0g-dev libwayland-dev libgtk-4-dev lib-gtk-session-lock-dev` - Fedora: `# dnf install gcc meson pkgconf scdoc pam-devel wayland-devel gtk3-devel`, install gtk-session-lock manually - Void: `# xbps-install gcc meson pkgconf scdoc pam-devel wayland-devel gtk+3-devel gtk-session-lock-devel` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/include/auth.h new/gtklock-5.0.0/include/auth.h --- old/gtklock-4.0.0/include/auth.h 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/include/auth.h 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik +// Copyright (c) 2026 Jovan Lanik // PAM Authentication diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/include/config.h new/gtklock-5.0.0/include/config.h --- old/gtklock-4.0.0/include/config.h 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/include/config.h 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik +// Copyright (c) 2026 Jovan Lanik // Configuration diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/include/gtklock.h new/gtklock-5.0.0/include/gtklock.h --- old/gtklock-4.0.0/include/gtklock.h 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/include/gtklock.h 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja +// Copyright (c) 2026 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja // gtklock application @@ -37,8 +37,11 @@ char *layout_path; char *lock_command; char *unlock_command; + char *idle_command; GArray *modules; + + gboolean test_mode; }; void gtklock_remove_window(struct GtkLock *gtklock, struct Window *win); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/include/module.h new/gtklock-5.0.0/include/module.h --- old/gtklock-4.0.0/include/module.h 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/include/module.h 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik +// Copyright (c) 2026 Jovan Lanik // Module support diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/include/util.h new/gtklock-5.0.0/include/util.h --- old/gtklock-4.0.0/include/util.h 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/include/util.h 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik +// Copyright (c) 2026 Jovan Lanik // Utility functions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/include/window.h new/gtklock-5.0.0/include/window.h --- old/gtklock-4.0.0/include/window.h 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/include/window.h 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja +// Copyright (c) 2026 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja // Window functions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/include/xdg.h new/gtklock-5.0.0/include/xdg.h --- old/gtklock-4.0.0/include/xdg.h 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/include/xdg.h 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Louis DeLosSantos, Jovan Lanik +// Copyright (c) 2026 Louis DeLosSantos, Jovan Lanik // XDG functions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/man/gtklock.1.scd new/gtklock-5.0.0/man/gtklock.1.scd --- old/gtklock-4.0.0/man/gtklock.1.scd 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/man/gtklock.1.scd 2026-10-27 22:38:57.000000000 +0100 @@ -25,6 +25,9 @@ in the following order: $XDG_CONFIG_HOME/gtklock/config.ini and gtklock/config.ini under each directory in $XDG_CONFIG_DIRS. +*-p, --preview* + Enable preview mode where any password can unlock + # CONFIGURATION Configuration is stored in glib key file format. Options are specified as @@ -76,6 +79,9 @@ *-U, --unlock-command* Command to execute after unlocking. Command is executed asynchronously. +*-I, --idle-command* + Command to execute after idle timeout. Command is executed asynchronously. + *-M, --monitor-priority* <name> Set monitor focus priority. Option can be specified multiple times. @@ -100,6 +106,11 @@ } ``` +# SIGNALS + +*SIGUSR1* + Unlock the screen and exit. + # AUTHORS Maintained by Jovan Lanik <[email protected]>, who is assisted by other diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/man/meson.build new/gtklock-5.0.0/man/meson.build --- old/gtklock-4.0.0/man/meson.build 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/man/meson.build 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ # gtklock -# Copyright (c) 2023 Jianhua Lu, Jovan Lanik +# Copyright (c) 2026 Jianhua Lu, Jovan Lanik scdoc = find_program('scdoc', required: get_option('man-pages')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/meson.build new/gtklock-5.0.0/meson.build --- old/gtklock-4.0.0/meson.build 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/meson.build 2026-10-27 22:38:57.000000000 +0100 @@ -1,9 +1,9 @@ # gtklock -# Copyright (c) 2023 Jianhua Lu, Jovan Lanik, Zephyr Lykos +# Copyright (c) 2026 Jianhua Lu, Jovan Lanik, Zephyr Lykos project( 'gtklock', 'c', - version : '4.0.0', + version : '5.0.0', license : 'GPLv3', default_options : ['c_std=c11'] ) @@ -16,7 +16,7 @@ gtk = dependency('gtk+-3.0') gtk_session_lock = dependency('gtk-session-lock-0') gmodule_export = dependency('gmodule-export-2.0') -pam = dependency('pam') +pam = meson.get_compiler('c').find_library('pam') dependencies = [ gtk, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/LINGUAS new/gtklock-5.0.0/po/LINGUAS --- old/gtklock-4.0.0/po/LINGUAS 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/po/LINGUAS 2026-10-27 22:38:57.000000000 +0100 @@ -1,4 +1,10 @@ cs de +es +ka +pt_BR sr sr@latin +zh_CN +ru +ro diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/eo.po new/gtklock-5.0.0/po/eo.po --- old/gtklock-4.0.0/po/eo.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/eo.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,35 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the gtklock package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2025-08-06 21:56+0200\n" +"Last-Translator: Szafranek 13 <[email protected]>\n" +"Language-Team: Luduko <discord.gg/aArnDCUGbu>\n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.6\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "Ensaluto malsukcesis" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "Caps Lock ŝaltita" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "Pasvorto:" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "Malŝlosi" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/es.po new/gtklock-5.0.0/po/es.po --- old/gtklock-4.0.0/po/es.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/es.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,35 @@ +# Spanish translations for gtklock package +# Traducciones al español para el paquete gtklock. +# Copyright (C) 2026 THE gtklock'S COPYRIGHT HOLDER +# This file is distributed under the same license as the gtklock package. +# Joel Rico Martínez <joel@debian>, 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2026-07-18 13:07+0200\n" +"Last-Translator: Joel Rico Martínez <joel@debian>\n" +"Language-Team: Spanish <[email protected]>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "Autenticación fallida" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "Bloq Mayús está activado" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "Contraseña:" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "Desbloquear" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/fr.po new/gtklock-5.0.0/po/fr.po --- old/gtklock-4.0.0/po/fr.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/fr.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,34 @@ +# French translations for gtklock +# Copyright (C) 2024 gtklocks copyright holder +# This file is distributed under the same license as the gtklock package. +# Pierre Thibault <[email protected]>, 2026 +# +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2026-05-01 00:00+0200\n" +"Last-Translator: Pierre Thibault <[email protected]>\n" +"Language-Team: French\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.4.4\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "La connexion a échoué" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "Verrouillage majuscule activé" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "Mot de passe :" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "Déverrouiller" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/ka.po new/gtklock-5.0.0/po/ka.po --- old/gtklock-4.0.0/po/ka.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/ka.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,34 @@ +# Georgian translation for gtklock. +# Copyright (C) 2026 gtklock authors. +# This file is distributed under the same license as the gtklock package. +# Ekaterine Papava <[email protected]>, 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2026-02-02 20:32+0100\n" +"Last-Translator: Ekaterine Papava <[email protected]>\n" +"Language-Team: Georgian <(nothing)>\n" +"Language: ka\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.8\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "შესვლა წარუმატებელია" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "CapsLock ჩართულია" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "პაროლი:" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "განბლოკვა" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/meson.build new/gtklock-5.0.0/po/meson.build --- old/gtklock-4.0.0/po/meson.build 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/po/meson.build 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ # gtklock -# Copyright (c) 2023 Kenny Levinsen, Jovan Lanik +# Copyright (c) 2026 Kenny Levinsen, Jovan Lanik if import('fs').is_absolute(get_option('localedir')) localedir = get_option('localedir') @@ -16,6 +16,6 @@ i18n = import('i18n') i18n.gettext(meson.project_name(), - args: '--directory=' + meson.source_root(), + args: '--directory=' + meson.project_source_root(), preset: 'glib' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/pt_BR.po new/gtklock-5.0.0/po/pt_BR.po --- old/gtklock-4.0.0/po/pt_BR.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/pt_BR.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,34 @@ +# Brazilian Portuguese translations for gtklock +# Copyright (C) 2025 THE gtklock'S COPYRIGHT HOLDER +# This file is distributed under the same license as the gtklock package. +# Arthur Cerqueira <[email protected]>, 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2025-01-30 14:16-0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "Autenticação falhou" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "Caps Lock está ativo" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "Senha:" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "Desbloquear" Binary files old/gtklock-4.0.0/po/ro.mo and new/gtklock-5.0.0/po/ro.mo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/ro.po new/gtklock-5.0.0/po/ro.po --- old/gtklock-4.0.0/po/ro.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/ro.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,36 @@ +# Romanian translations for gtklock package. +# Copyright (C) 2025 THE gtklock'S COPYRIGHT HOLDER +# This file is distributed under the same license as the gtklock package. +# Vlad <[email protected]>, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2025-08-03 21:05+0300\n" +"Last-Translator: Vlad <[email protected]>\n" +"Language-Team: Romanian <[email protected]>\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" +"X-Generator: Poedit 3.6\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "Autentificare eșuată" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "Majusculele sunt blocate" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "Parola:" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "Deblochează" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/ru.po new/gtklock-5.0.0/po/ru.po --- old/gtklock-4.0.0/po/ru.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/ru.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,35 @@ +# Russian translations for gtklock package. +# Copyright (C) 2024 THE gtklock'S COPYRIGHT HOLDER +# This file is distributed under the same license as the gtklock package. +# Jovan Lanik <[email protected]>, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2025-02-21 23:33+0200\n" +"Last-Translator: Eugene Lesnov <[email protected]>\n" +"Language-Team: Russian <(nothing)>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "Ошибка входа" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "Включен Caps Lock" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "Пароль:" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "Разблокировать" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/po/zh_CN.po new/gtklock-5.0.0/po/zh_CN.po --- old/gtklock-4.0.0/po/zh_CN.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gtklock-5.0.0/po/zh_CN.po 2026-10-27 22:38:57.000000000 +0100 @@ -0,0 +1,34 @@ +# zh_CN translations for gtklock package. +# Copyright (C) 2024 THE gtklock'S COPYRIGHT HOLDER +# This file is distributed under the same license as the gtklock package. +# Automatically generated, 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: gtklock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-07 13:48+0200\n" +"PO-Revision-Date: 2024-06-27 22:18+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: src/window.c:129 +msgid "Login failed" +msgstr "登录失败" + +#: src/window.c:264 +msgid "Caps Lock is on" +msgstr "大写已锁定" + +#: res/gtklock.ui:35 +msgid "Password:" +msgstr "密码:" + +#: res/gtklock.ui:86 +msgid "Unlock" +msgstr "解锁" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/res/meson.build new/gtklock-5.0.0/res/meson.build --- old/gtklock-4.0.0/res/meson.build 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/res/meson.build 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ # gtklock -# Copyright (c) 2023 Jianhua Lu, Jovan Lanik +# Copyright (c) 2026 Jianhua Lu, Jovan Lanik gnome = import('gnome') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/auth.c new/gtklock-5.0.0/src/auth.c --- old/gtklock-4.0.0/src/auth.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/auth.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik, Zephyr Lykos +// Copyright (c) 2026 Jovan Lanik, Zephyr Lykos // PAM Authentication diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/config.c new/gtklock-5.0.0/src/config.c --- old/gtklock-4.0.0/src/config.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/config.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik +// Copyright (c) 2026 Jovan Lanik // Configuration diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/gtklock.c new/gtklock-5.0.0/src/gtklock.c --- old/gtklock-4.0.0/src/gtklock.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/gtklock.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,9 +1,10 @@ // gtklock -// Copyright (c) 2022 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja +// Copyright (c) 2026 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja // gtklock application -#include <signal.h> +#define _POSIX_C_SOURCE +#include <glib-unix.h> #include <gtk/gtk.h> #include "util.h" @@ -15,6 +16,7 @@ for(guint idx = 0; idx < gtklock->windows->len; idx++) { struct Window *ctx = g_array_index(gtklock->windows, struct Window *, idx); if(ctx == win) { + if(gtklock->focused_window == win) gtklock->focused_window = NULL; g_array_remove_index(gtklock->windows, idx); g_free(ctx); return; @@ -55,21 +57,31 @@ } } -static int gtklock_update_time_handler(gpointer data) { +static gboolean update_time_handler(gpointer data) { struct GtkLock *gtklock = (struct GtkLock *)data; gtklock_update_clocks(gtklock); gtklock_update_dates(gtklock); return G_SOURCE_CONTINUE; } -static int gtklock_idle_handler(gpointer data) { +static void exec_command(const gchar *command) { + GError *err = NULL; + g_spawn_command_line_async(command, &err); + if(err != NULL) { + g_warning("Executing `%s` failed: %s", command, err->message); + g_error_free(err); + } +} + +static gboolean idle_handler(gpointer data) { struct GtkLock *gtklock = (struct GtkLock *)data; - gtklock_idle_hide(gtklock); + if(gtklock->use_idle_hide) gtklock_idle_hide(gtklock); + if(gtklock->idle_command) exec_command(gtklock->idle_command); return G_SOURCE_CONTINUE; } void gtklock_idle_hide(struct GtkLock *gtklock) { - if(!gtklock->use_idle_hide || gtklock->hidden || g_application_get_is_busy(G_APPLICATION(gtklock->app))) + if(gtklock->hidden || g_application_get_is_busy(G_APPLICATION(gtklock->app))) return; gtklock->hidden = TRUE; module_on_idle_hide(gtklock); @@ -84,31 +96,32 @@ if(gtklock->hidden) { gtklock->hidden = FALSE; module_on_idle_show(gtklock); - } - for(guint idx = 0; idx < gtklock->windows->len; idx++) { - struct Window *ctx = g_array_index(gtklock->windows, struct Window *, idx); - window_idle_show(ctx); + for(guint idx = 0; idx < gtklock->windows->len; idx++) { + struct Window *ctx = g_array_index(gtklock->windows, struct Window *, idx); + window_idle_show(ctx); + } } - if(!gtklock->use_idle_hide) return; - if(gtklock->idle_hide_source > 0) g_source_remove(gtklock->idle_hide_source); - gtklock->idle_hide_source = g_timeout_add_seconds(gtklock->idle_timeout, G_SOURCE_FUNC(gtklock_idle_handler), gtklock); + if(gtklock->use_idle_hide || gtklock->idle_command) { + if(gtklock->idle_hide_source > 0) g_source_remove(gtklock->idle_hide_source); + gtklock->idle_hide_source = g_timeout_add_seconds(gtklock->idle_timeout, G_SOURCE_FUNC(idle_handler), gtklock); + } } -static void exec_command(const gchar *command) { - GError *err = NULL; - g_spawn_command_line_async(command, &err); - if(err != NULL) { - g_warning("Executing `%s` failed: %s", command, err->message); - g_error_free(err); - } +static gboolean signal_handler(gpointer data) { + struct GtkLock *gtklock = data; + g_application_quit(G_APPLICATION(gtklock->app)); + return FALSE; } static void locked(GtkSessionLockLock *lock, void *data) { struct GtkLock *gtklock = (struct GtkLock *)data; + + g_unix_signal_add(SIGUSR1, G_SOURCE_FUNC(signal_handler), gtklock); + module_on_locked(gtklock); - if(gtklock->parent > 0) kill(gtklock->parent, SIGUSR1); + if(gtklock->parent > 0) kill(gtklock->parent, SIGUSR2); if(gtklock->lock_command) exec_command(gtklock->lock_command); return; } @@ -131,11 +144,11 @@ gtk_session_lock_lock_lock(gtklock->lock); - gtklock->draw_time_source = g_timeout_add(1000, G_SOURCE_FUNC(gtklock_update_time_handler), gtklock); + gtklock->draw_time_source = g_timeout_add(1000, G_SOURCE_FUNC(update_time_handler), gtklock); gtklock_update_clocks(gtklock); gtklock_update_dates(gtklock); - if(gtklock->use_idle_hide) gtklock->idle_hide_source = - g_timeout_add_seconds(gtklock->idle_timeout, G_SOURCE_FUNC(gtklock_idle_handler), gtklock); + if(gtklock->use_idle_hide || gtklock->idle_command) gtklock->idle_hide_source = + g_timeout_add_seconds(gtklock->idle_timeout, G_SOURCE_FUNC(idle_handler), gtklock); } void gtklock_shutdown(struct GtkLock *gtklock) { @@ -151,6 +164,11 @@ gtk_session_lock_lock_unlock_and_destroy(gtklock->lock); gdk_display_sync(gdk_display_get_default()); + for(guint idx = 0; idx < gtklock->windows->len; idx++) { + struct Window *ctx = g_array_index(gtklock->windows, struct Window *, idx); + gtk_widget_destroy(ctx->window); + } + if(gtklock->unlock_command) exec_command(gtklock->unlock_command); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/meson.build new/gtklock-5.0.0/src/meson.build --- old/gtklock-4.0.0/src/meson.build 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/meson.build 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ # gtklock -# Copyright (c) 2023 Jianhua Lu, Jovan Lanik +# Copyright (c) 2026 Jianhua Lu, Jovan Lanik gtklock_sources = files([ 'auth.c', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/module.c new/gtklock-5.0.0/src/module.c --- old/gtklock-4.0.0/src/module.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/module.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik, Zephyr Lykos +// Copyright (c) 2026 Jovan Lanik, Zephyr Lykos // Module support diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/source.c new/gtklock-5.0.0/src/source.c --- old/gtklock-4.0.0/src/source.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/source.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja +// Copyright (c) 2026 Kenny Levinsen, Jovan Lanik, Bhaskar Khoraja #define _POSIX_C_SOURCE 200809L @@ -40,6 +40,7 @@ static gboolean follow_focus = FALSE; static gboolean idle_hide = FALSE; static gboolean start_hidden = FALSE; +static gboolean test_mode = FALSE; static gint idle_timeout = 15; @@ -53,12 +54,14 @@ static gchar *date_format = NULL; static gchar *lock_command = NULL; static gchar *unlock_command = NULL; +static gchar *idle_command = NULL; static gchar **monitor_priority = NULL; static GOptionEntry main_entries[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, &show_version, "Show version", NULL }, { "config", 'c', 0, G_OPTION_ARG_FILENAME, &config_path, "Load config file", NULL }, { "daemonize", 'd', 0, G_OPTION_ARG_NONE, &should_daemonize, "Detach from controlling terminal", NULL }, + { "preview", 'p', 0, G_OPTION_ARG_NONE, &test_mode, "Enable preview mode where any password can unlock", NULL }, { NULL }, }; @@ -76,6 +79,7 @@ { "start-hidden", 'S', 0, G_OPTION_ARG_NONE, &start_hidden, "Start with hidden form", NULL }, { "lock-command", 'L', 0, G_OPTION_ARG_STRING, &lock_command, "Command to execute after locking", NULL }, { "unlock-command", 'U', 0, G_OPTION_ARG_STRING, &unlock_command, "Command to execute after unlocking", NULL }, + { "idle-command", 'I', 0, G_OPTION_ARG_STRING, &idle_command, "Command to execute after idle timeout", NULL }, { "monitor-priority", 'M', 0, G_OPTION_ARG_STRING_ARRAY, &monitor_priority, "Set monitor focus priority", NULL }, { NULL }, }; @@ -97,11 +101,17 @@ struct Window *w = window_by_monitor(monitor); if(w != NULL) { if(gtklock->focused_window == w) { - struct Window *any_window = g_array_index(gtklock->windows, struct Window*, 0); - if(any_window == w) any_window = g_array_index(gtklock->windows, struct Window*, 1); + struct Window *any_window = NULL; + for(guint idx = 0; idx < gtklock->windows->len; idx++) { + struct Window *ctx = g_array_index(gtklock->windows, struct Window *, idx); + if(ctx != w) { + any_window = ctx; + break; + } + } - gtklock->focused_window = NULL; - if(any_window) window_swap_focus(any_window, w); + if(any_window) gtklock_focus_window(gtklock, any_window); + else gtklock->focused_window = NULL; } gtk_session_lock_unmap_lock_window(GTK_WINDOW(w->window)); gtk_widget_destroy(w->window); @@ -183,11 +193,11 @@ } static void shutdown(GtkApplication *app, gpointer user_data) { + gtklock_shutdown(gtklock); for(guint idx = 0; idx < gtklock->modules->len; idx++) { GModule *module = g_array_index(gtklock->modules, GModule *, idx); g_module_close(module); } - gtklock_shutdown(gtklock); } static void attach_style(const gchar *format, ...) G_GNUC_PRINTF(1, 2); @@ -237,10 +247,10 @@ if(WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS) { sigset_t set; sigemptyset(&set); - sigaddset(&set, SIGUSR1); + sigaddset(&set, SIGUSR2); sigprocmask(SIG_BLOCK, &set, NULL); int ret = sigtimedwait(&set, NULL, &(struct timespec){ 1, 0 }); - if(ret == SIGUSR1) + if(ret == SIGUSR2) exit(EXIT_SUCCESS); exit(EXIT_FAILURE); } @@ -270,7 +280,7 @@ bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); - GOptionContext *option_context = g_option_context_new("- GTK-based lockscreen for sway"); + GOptionContext *option_context = g_option_context_new("- GTK-based lockscreen for Wayland"); g_option_context_add_main_entries(option_context, main_entries, NULL); g_option_context_set_help_enabled(option_context, FALSE); g_option_context_set_ignore_unknown_options(option_context, TRUE); @@ -343,6 +353,7 @@ gtklock->hidden = start_hidden; gtklock->idle_timeout = (guint)idle_timeout; + gtklock->test_mode = test_mode; gtklock->follow_focus = follow_focus; gtklock->use_idle_hide = idle_hide; @@ -353,6 +364,7 @@ gtklock->layout_path = layout_path; gtklock->lock_command = lock_command; gtklock->unlock_command = unlock_command; + gtklock->idle_command = idle_command; gtklock->modules = modules; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/util.c new/gtklock-5.0.0/src/util.c --- old/gtklock-4.0.0/src/util.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/util.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Jovan Lanik +// Copyright (c) 2026 Jovan Lanik // Utility functions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/window.c new/gtklock-5.0.0/src/window.c --- old/gtklock-4.0.0/src/window.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/window.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Kenny Levinsen, Jovan Lanik, Erik Reider, Melih Darcan, Bhaskar Khoraja +// Copyright (c) 2026 Kenny Levinsen, Jovan Lanik, Erik Reider, Melih Darcan, Bhaskar Khoraja // Window functions @@ -143,6 +143,9 @@ } static gpointer window_pw_wait(gpointer data) { + if (gtklock->test_mode) { + g_application_quit(G_APPLICATION(gtklock->app)); + } struct Window *ctx = data; const char *password = gtk_entry_get_text((GtkEntry*)ctx->input_field); while(TRUE) { @@ -297,7 +300,7 @@ g_signal_connect(w->window, "destroy", G_CALLBACK(window_destroy_notify), NULL); if(gtklock->follow_focus) g_signal_connect(w->window, "enter-notify-event", G_CALLBACK(window_enter_notify), NULL); - if(gtklock->use_idle_hide || gtklock->hidden) { + if(gtklock->use_idle_hide || gtklock->hidden || gtklock->idle_command) { gtk_widget_add_events(w->window, GDK_POINTER_MOTION_MASK); g_signal_connect(w->window, "key-press-event", G_CALLBACK(window_idle_key), NULL); g_signal_connect(w->window, "motion-notify-event", G_CALLBACK(window_idle_motion), NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtklock-4.0.0/src/xdg.c new/gtklock-5.0.0/src/xdg.c --- old/gtklock-4.0.0/src/xdg.c 2024-10-21 22:29:53.000000000 +0200 +++ new/gtklock-5.0.0/src/xdg.c 2026-10-27 22:38:57.000000000 +0100 @@ -1,5 +1,5 @@ // gtklock -// Copyright (c) 2022 Louis DeLosSantos, Jovan Lanik +// Copyright (c) 2026 Louis DeLosSantos, Jovan Lanik // XDG funtions
