From 3a4109eb2d52c9183fb48c265fd128377864bb1a Mon Sep 17 00:00:00 2001 From: Luna Date: Tue, 17 Mar 2026 12:27:23 +0100 Subject: [PATCH] Add toggle visibility to password (#938) ## What are the changes about? I have add a keybinding to toggle the visibility of the password ## What existing issue does this resolve? N/A ## Pre-requisites - [x] I have tested & confirmed the changes work locally Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/938 Reviewed-by: AnErrupTion Co-authored-by: Luna Co-committed-by: Luna --- res/config.ini | 3 +++ res/lang/ar.ini | 1 + res/lang/bg.ini | 1 + res/lang/cat.ini | 1 + res/lang/cs.ini | 1 + res/lang/de.ini | 1 + res/lang/en.ini | 1 + res/lang/es.ini | 1 + res/lang/fr.ini | 1 + res/lang/it.ini | 1 + res/lang/ja_JP.ini | 1 + res/lang/ku.ini | 1 + res/lang/lv.ini | 1 + res/lang/pl.ini | 1 + res/lang/pt.ini | 1 + res/lang/pt_BR.ini | 1 + res/lang/ro.ini | 1 + res/lang/ru.ini | 1 + res/lang/sr.ini | 1 + res/lang/sv.ini | 3 ++- res/lang/tr.ini | 3 ++- res/lang/uk.ini | 1 + res/lang/zh_CN.ini | 1 + src/config/Config.zig | 1 + src/config/Lang.zig | 1 + src/main.zig | 34 +++++++++++++++++++++++++++++++++- src/tui/components/Text.zig | 4 ++++ 27 files changed, 66 insertions(+), 3 deletions(-) diff --git a/res/config.ini b/res/config.ini index 9e917f1..715d679 100644 --- a/res/config.ini +++ b/res/config.ini @@ -325,6 +325,9 @@ session_log = .local/state/ly-session.log # Setup command setup_cmd = $CONFIG_DIRECTORY/ly/setup.sh +# Specifies the key combination used for showing the password +show_password_key = F7 + # Command executed when pressing shutdown_key shutdown_cmd = /sbin/shutdown $PLATFORM_SHUTDOWN_ARG now diff --git a/res/lang/ar.ini b/res/lang/ar.ini index 6971326..14aaee6 100644 --- a/res/lang/ar.ini +++ b/res/lang/ar.ini @@ -73,6 +73,7 @@ restart = اعادة التشغيل shell = shell shutdown = ايقاف التشغيل sleep = وضع السكون + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/bg.ini b/res/lang/bg.ini index 8557023..ee38f60 100644 --- a/res/lang/bg.ini +++ b/res/lang/bg.ini @@ -73,6 +73,7 @@ restart = рестартиране shell = обвивка shutdown = изключване sleep = заспиване + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/cat.ini b/res/lang/cat.ini index 85dbe53..967c728 100644 --- a/res/lang/cat.ini +++ b/res/lang/cat.ini @@ -73,6 +73,7 @@ restart = reiniciar shell = shell shutdown = aturar sleep = suspendre + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/cs.ini b/res/lang/cs.ini index ff6943e..9e879e1 100644 --- a/res/lang/cs.ini +++ b/res/lang/cs.ini @@ -73,6 +73,7 @@ restart = restartovat shell = příkazový řádek shutdown = vypnout + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/de.ini b/res/lang/de.ini index 60ca3bd..d4a5f30 100644 --- a/res/lang/de.ini +++ b/res/lang/de.ini @@ -73,6 +73,7 @@ restart = Neustarten shell = Shell shutdown = Herunterfahren sleep = Sleep + wayland = wayland x11 = X11 xinitrc = xinitrc diff --git a/res/lang/en.ini b/res/lang/en.ini index b840816..082b02f 100644 --- a/res/lang/en.ini +++ b/res/lang/en.ini @@ -73,6 +73,7 @@ restart = reboot shell = shell shutdown = shutdown sleep = sleep +toggle_password = toggle password wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/es.ini b/res/lang/es.ini index fd3450a..9f04ecb 100644 --- a/res/lang/es.ini +++ b/res/lang/es.ini @@ -73,6 +73,7 @@ restart = reiniciar shell = shell shutdown = apagar sleep = suspender + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/fr.ini b/res/lang/fr.ini index 17258de..886149b 100644 --- a/res/lang/fr.ini +++ b/res/lang/fr.ini @@ -73,6 +73,7 @@ restart = redémarrer shell = shell shutdown = éteindre sleep = veille + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/it.ini b/res/lang/it.ini index d909609..245c84e 100644 --- a/res/lang/it.ini +++ b/res/lang/it.ini @@ -73,6 +73,7 @@ restart = riavvio shell = shell shutdown = arresto + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/ja_JP.ini b/res/lang/ja_JP.ini index f77abd3..9c98b93 100644 --- a/res/lang/ja_JP.ini +++ b/res/lang/ja_JP.ini @@ -73,6 +73,7 @@ restart = 再起動 shell = シェル shutdown = シャットダウン sleep = スリープ + wayland = Wayland x11 = X11 xinitrc = xinitrc diff --git a/res/lang/ku.ini b/res/lang/ku.ini index 897d557..a47ef65 100644 --- a/res/lang/ku.ini +++ b/res/lang/ku.ini @@ -73,6 +73,7 @@ restart = ji nû ve bide destpêkirin shell = shell shutdown = vemirîne sleep = têxîne xewê + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/lv.ini b/res/lang/lv.ini index f572a99..6def7f8 100644 --- a/res/lang/lv.ini +++ b/res/lang/lv.ini @@ -73,6 +73,7 @@ restart = restartēt shell = terminālis shutdown = izslēgt sleep = snauda + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/pl.ini b/res/lang/pl.ini index aadc9ff..3adef78 100644 --- a/res/lang/pl.ini +++ b/res/lang/pl.ini @@ -73,6 +73,7 @@ restart = uruchom ponownie shell = powłoka shutdown = wyłącz sleep = uśpij + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/pt.ini b/res/lang/pt.ini index 16d25a3..608a122 100644 --- a/res/lang/pt.ini +++ b/res/lang/pt.ini @@ -73,6 +73,7 @@ restart = reiniciar shell = shell shutdown = encerrar + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/pt_BR.ini b/res/lang/pt_BR.ini index f8d0e26..fb5d58e 100644 --- a/res/lang/pt_BR.ini +++ b/res/lang/pt_BR.ini @@ -73,6 +73,7 @@ restart = reiniciar shell = shell shutdown = desligar + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/ro.ini b/res/lang/ro.ini index 9dfd75a..33c6e5d 100644 --- a/res/lang/ro.ini +++ b/res/lang/ro.ini @@ -73,6 +73,7 @@ restart = resetează shell = shell shutdown = opreşte sistemul + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/ru.ini b/res/lang/ru.ini index e47a41e..baad2f2 100644 --- a/res/lang/ru.ini +++ b/res/lang/ru.ini @@ -73,6 +73,7 @@ restart = перезагрузить shell = оболочка shutdown = выключить sleep = сон + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/sr.ini b/res/lang/sr.ini index 71c7ea1..e5dcd4b 100644 --- a/res/lang/sr.ini +++ b/res/lang/sr.ini @@ -73,6 +73,7 @@ restart = ponovo pokreni shell = shell shutdown = ugasi + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/sv.ini b/res/lang/sv.ini index 5f869ca..2cb113c 100644 --- a/res/lang/sv.ini +++ b/res/lang/sv.ini @@ -73,6 +73,7 @@ restart = starta om shell = shell shutdown = stäng av sleep = viloläge + wayland = wayland x11 = x11 -xinitrc = xinitrc \ No newline at end of file +xinitrc = xinitrc diff --git a/res/lang/tr.ini b/res/lang/tr.ini index d3ad9ba..807cf30 100644 --- a/res/lang/tr.ini +++ b/res/lang/tr.ini @@ -73,6 +73,7 @@ restart = yeniden baslat shell = shell shutdown = makineyi kapat sleep = uykuya al + wayland = wayland -xinitrc = xinitrc \ No newline at end of file +xinitrc = xinitrc diff --git a/res/lang/uk.ini b/res/lang/uk.ini index f1dcf54..fe37435 100644 --- a/res/lang/uk.ini +++ b/res/lang/uk.ini @@ -73,6 +73,7 @@ restart = перезавантажити shell = оболонка shutdown = вимкнути + wayland = wayland xinitrc = xinitrc diff --git a/res/lang/zh_CN.ini b/res/lang/zh_CN.ini index 493ceac..ce1b23c 100644 --- a/res/lang/zh_CN.ini +++ b/res/lang/zh_CN.ini @@ -73,6 +73,7 @@ password = 密码 shell = shell + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/src/config/Config.zig b/src/config/Config.zig index 1672dbb..b3f1e53 100644 --- a/src/config/Config.zig +++ b/src/config/Config.zig @@ -82,6 +82,7 @@ save: bool = true, service_name: [:0]const u8 = "ly", session_log: ?[]const u8 = "ly-session.log", setup_cmd: []const u8 = build_options.config_directory ++ "/ly/setup.sh", +show_password_key: []const u8 = "F7", shutdown_cmd: []const u8 = "/sbin/shutdown -a now", shutdown_key: []const u8 = "F1", sleep_cmd: ?[]const u8 = null, diff --git a/src/config/Lang.zig b/src/config/Lang.zig index 79145e5..e21700a 100644 --- a/src/config/Lang.zig +++ b/src/config/Lang.zig @@ -78,6 +78,7 @@ restart: []const u8 = "reboot", shell: [:0]const u8 = "shell", shutdown: []const u8 = "shutdown", sleep: []const u8 = "sleep", +toggle_password: []const u8 = "toggle password", wayland: []const u8 = "wayland", x11: []const u8 = "x11", xinitrc: [:0]const u8 = "xinitrc", diff --git a/src/main.zig b/src/main.zig index a1d88b8..0f5df1d 100644 --- a/src/main.zig +++ b/src/main.zig @@ -76,6 +76,7 @@ const UiState = struct { restart_label: Label, sleep_label: Label, hibernate_label: Label, + toggle_password_label: Label, brightness_down_label: Label, brightness_up_label: Label, numlock_label: Label, @@ -393,6 +394,16 @@ pub fn main() !void { ); defer state.hibernate_label.deinit(); + state.toggle_password_label = Label.init( + "", + null, + state.buffer.fg, + state.buffer.bg, + null, + null, + ); + defer state.toggle_password_label.deinit(); + state.brightness_down_label = Label.init( "", null, @@ -424,6 +435,11 @@ pub fn main() !void { "{s} {s}", .{ state.config.restart_key, state.lang.restart }, ); + try state.toggle_password_label.setTextAlloc( + state.allocator, + "{s} {s}", + .{ state.config.show_password_key, state.lang.toggle_password }, + ); if (state.config.sleep_cmd != null) { try state.sleep_label.setTextAlloc( state.allocator, @@ -1019,6 +1035,10 @@ pub fn main() !void { if (state.config.sleep_cmd != null) { try layer2.append(state.allocator, state.sleep_label.widget()); } + if (state.config.hibernate_cmd != null) { + try layer2.append(state.allocator, state.hibernate_label.widget()); + } + try layer2.append(state.allocator, state.toggle_password_label.widget()); if (state.config.brightness_down_key != null) { try layer2.append(state.allocator, state.brightness_down_label.widget()); } @@ -1074,6 +1094,7 @@ pub fn main() !void { try state.buffer.registerKeybind(state.config.shutdown_key, &shutdownCmd, &state); try state.buffer.registerKeybind(state.config.restart_key, &restartCmd, &state); + try state.buffer.registerKeybind(state.config.show_password_key, &togglePasswordMask, &state); if (state.config.sleep_cmd != null) try state.buffer.registerKeybind(state.config.sleep_key, &sleepCmd, &state); if (state.config.hibernate_cmd != null) try state.buffer.registerKeybind(state.config.hibernate_key, &hibernateCmd, &state); if (state.config.brightness_down_key) |key| try state.buffer.registerKeybind(key, &decreaseBrightnessCmd, &state); @@ -1201,6 +1222,14 @@ fn clearPassword(ptr: *anyopaque) !bool { return false; } +fn togglePasswordMask(ptr: *anyopaque) !bool { + var state: *UiState = @ptrCast(@alignCast(ptr)); + + state.password.toggleMask(); + state.buffer.drawNextFrame(true); + return false; +} + fn quit(ptr: *anyopaque) !bool { var state: *UiState = @ptrCast(@alignCast(ptr)); @@ -1666,7 +1695,10 @@ fn positionWidgets(ptr: *anyopaque) !void { state.hibernate_label.positionX(state.sleep_label .childrenPosition() .addX(1)); - state.brightness_down_label.positionX(state.hibernate_label + state.toggle_password_label.positionX(state.hibernate_label + .childrenPosition() + .addX(1)); + state.brightness_down_label.positionX(state.toggle_password_label .childrenPosition() .addX(1)); state.brightness_up_label.positionXY(state.brightness_down_label diff --git a/src/tui/components/Text.zig b/src/tui/components/Text.zig index 3890e79..d31aee7 100644 --- a/src/tui/components/Text.zig +++ b/src/tui/components/Text.zig @@ -96,6 +96,10 @@ pub fn clear(self: *Text) void { self.visible_start = 0; } +pub fn toggleMask(self: *Text) void { + self.masked = !self.masked; +} + pub fn handle(self: *Text, maybe_key: ?keyboard.Key, insert_mode: bool) !void { if (maybe_key) |key| { if (key.left or (!insert_mode and (key.h or key.backspace))) {