diff --git a/res/config.ini b/res/config.ini index 9e917f1..2096e65 100644 --- a/res/config.ini +++ b/res/config.ini @@ -331,6 +331,9 @@ shutdown_cmd = /sbin/shutdown $PLATFORM_SHUTDOWN_ARG now # Specifies the key combination used for shutdown shutdown_key = F1 +# Specifies the key combination used for showing the password +show_password_key = F7 + # Command executed when pressing sleep key (can be null) sleep_cmd = null 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..649193e 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,6 +1695,9 @@ fn positionWidgets(ptr: *anyopaque) !void { state.hibernate_label.positionX(state.sleep_label .childrenPosition() .addX(1)); + state.toggle_password_label.positionX(state.toggle_password_label + .childrenPosition() + .addX(1)); state.brightness_down_label.positionX(state.hibernate_label .childrenPosition() .addX(1)); 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))) {