diff --git a/src/auth.zig b/src/auth.zig index 07fa1fa..b463786 100644 --- a/src/auth.zig +++ b/src/auth.zig @@ -27,7 +27,11 @@ pub fn authenticate(allocator: Allocator, config: Config, desktop: Desktop, logi // Set the XDG environment variables setXdgSessionEnv(current_environment.display_server); - try setXdgEnv(allocator, tty_str, current_environment.xdg_name); + if (current_environment.entry_ini) |entry| { + try setXdgEnv(allocator, tty_str, entry.DesktopNames); + } else { + try setXdgEnv(allocator, tty_str, ""); + } // Open the PAM session const login_text_z = try allocator.dupeZ(u8, login.text.items); @@ -227,18 +231,21 @@ fn setXdgSessionEnv(display_server: enums.DisplayServer) void { } fn setXdgEnv(allocator: Allocator, tty_str: [:0]u8, desktop_name: []const u8) !void { - const desktop_name_z = try allocator.dupeZ(u8, desktop_name); - defer allocator.free(desktop_name_z); - const uid = interop.getuid(); var uid_buffer: [10 + @sizeOf(u32) + 1]u8 = undefined; const uid_str = try std.fmt.bufPrintZ(&uid_buffer, "/run/user/{d}", .{uid}); - _ = interop.setenv("XDG_CURRENT_DESKTOP", desktop_name_z.ptr, 0); + if (desktop_name.len > 0) { + const desktop_name_z = try allocator.dupeZ(u8, desktop_name); + defer allocator.free(desktop_name_z); + + _ = interop.setenv("XDG_CURRENT_DESKTOP", desktop_name_z.ptr, 0); + _ = interop.setenv("XDG_SESSION_DESKTOP", desktop_name_z.ptr, 0); + } + _ = interop.setenv("XDG_RUNTIME_DIR", uid_str.ptr, 0); _ = interop.setenv("XDG_SESSION_CLASS", "user", 0); _ = interop.setenv("XDG_SESSION_ID", "1", 0); - _ = interop.setenv("XDG_SESSION_DESKTOP", desktop_name_z.ptr, 0); _ = interop.setenv("XDG_SEAT", "seat0", 0); _ = interop.setenv("XDG_VTNR", tty_str.ptr, 0); } diff --git a/src/tui/components/Desktop.zig b/src/tui/components/Desktop.zig index 80e7666..c8d6045 100644 --- a/src/tui/components/Desktop.zig +++ b/src/tui/components/Desktop.zig @@ -18,7 +18,6 @@ const Desktop = @This(); pub const Environment = struct { entry_ini: ?Ini(Entry) = null, name: []const u8 = "", - xdg_name: []const u8 = "", cmd: []const u8 = "", specifier: []const u8 = "", display_server: DisplayServer = .wayland, @@ -27,6 +26,7 @@ pub const Environment = struct { const DesktopEntry = struct { Exec: []const u8 = "", Name: []const u8 = "", + DesktopNames: []const u8 = "", }; pub const Entry = struct { Desktop_Entry: DesktopEntry = DesktopEntry{} }; @@ -71,7 +71,6 @@ pub fn addEnvironment(self: *Desktop, name: []const u8, cmd: []const u8, display try self.environments.append(.{ .entry_ini = null, .name = name, - .xdg_name = getXdgName(name), .cmd = cmd, .specifier = switch (display_server) { .wayland => self.lang.wayland, @@ -88,7 +87,6 @@ pub fn addEnvironmentWithIni(self: *Desktop, entry_ini: Ini(Entry), name: []cons try self.environments.append(.{ .entry_ini = entry_ini, .name = name, - .xdg_name = getXdgName(name), .cmd = cmd, .specifier = switch (display_server) { .wayland => self.lang.wayland, @@ -173,8 +171,3 @@ fn goRight(self: *Desktop) void { self.current += 1; } - -fn getXdgName(name: []const u8) []const u8 { - // TODO - return name; -}