Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 16 additions & 95 deletions src/ui/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

from tools.bluetooth import BluetoothManager
from utils.arg_parser import ArgParse
from utils.tab_name import read_tab_from_file, tab_name_from_arguments

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib, Gdk # type: ignore
Expand Down Expand Up @@ -221,24 +222,7 @@ def create_lazy_tabs(self):
visibility = self.settings.get("visibility", {})

# Determine active tab (command line args > first visible)
active_tab = None
# Check command line args first
if self.arg_parser.find_arg(("-V", "--volume")) or self.arg_parser.find_arg(("-v", "")):
active_tab = "Volume"
elif self.arg_parser.find_arg(("-w", "--wifi")):
active_tab = "Wi-Fi"
elif self.arg_parser.find_arg(("-a", "--autostart")):
active_tab = "Autostart"
elif self.arg_parser.find_arg(("-b", "--bluetooth")):
active_tab = "Bluetooth"
elif self.arg_parser.find_arg(("-B", "--battery")):
active_tab = "Battery"
elif self.arg_parser.find_arg(("-d", "--display")):
active_tab = "Display"
elif self.arg_parser.find_arg(("-p", "--power")):
active_tab = "Power"
elif self.arg_parser.find_arg(("-u", "--usbguard")):
active_tab = "USBGuard"
active_tab = tab_name_from_arguments(self.arg_parser)

# If no args specified, use first visible tab
if active_tab is None:
Expand Down Expand Up @@ -575,85 +559,14 @@ def _finish_tab_loading(self):
active_tab = None

# Set active tab based on command line arguments
if (self.arg_parser.find_arg(("-V", "--volume")) or self.arg_parser.find_arg(("-v", ""))) and "Volume" in self.tab_pages:
page_num = self.tab_pages["Volume"]
self.logging.log(LogLevel.Info, f"Setting active tab to Volume (page {page_num})")
requested_tab = tab_name_from_arguments(self.arg_parser)
if requested_tab and requested_tab in self.tab_pages:
page_num = self.tab_pages[requested_tab]
self.logging.log(LogLevel.Info, f"Setting active tab to {requested_tab} (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "Volume"
active_tab = requested_tab
if self.minimal_mode:
self.set_title(f"Better Control - Volume")
elif self.arg_parser.find_arg(("-w", "--wifi")) and "Wi-Fi" in self.tab_pages:
page_num = self.tab_pages["Wi-Fi"]
self.logging.log(LogLevel.Info, f"Setting active tab to Wi-Fi (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "Wi-Fi"
if self.minimal_mode:
self.set_title(f"Better Control - Wi-Fi")
elif (
self.arg_parser.find_arg(("-a", "--autostart"))
and "Autostart" in self.tab_pages
):
page_num = self.tab_pages["Autostart"]
self.logging.log(LogLevel.Info, f"Setting active tab to Autostart (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "Autostart"
if self.minimal_mode:
translated_tab_name = self.tab_name_mapping.get("Autostart", "Autostart") if hasattr(self, 'tab_name_mapping') else "Autostart"
self.set_title(f"Better Control - {translated_tab_name}")
elif (
self.arg_parser.find_arg(("-b", "--bluetooth"))
and "Bluetooth" in self.tab_pages
):
page_num = self.tab_pages["Bluetooth"]
self.logging.log(LogLevel.Info, f"Setting active tab to Bluetooth (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "Bluetooth"
if self.minimal_mode:
translated_tab_name = self.tab_name_mapping.get("Bluetooth", "Bluetooth") if hasattr(self, 'tab_name_mapping') else "Bluetooth"
self.set_title(f"Better Control - {translated_tab_name}")
elif (
self.arg_parser.find_arg(("-B", "--battery"))
and "Battery" in self.tab_pages
):
page_num = self.tab_pages["Battery"]
self.logging.log(LogLevel.Info, f"Setting active tab to Battery (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "Battery"
if self.minimal_mode:
translated_tab_name = self.tab_name_mapping.get("Battery", "Battery") if hasattr(self, 'tab_name_mapping') else "Battery"
self.set_title(f"Better Control - {translated_tab_name}")
elif (
self.arg_parser.find_arg(("-d", "--display"))
and "Display" in self.tab_pages
):
page_num = self.tab_pages["Display"]
self.logging.log(LogLevel.Info, f"Setting active tab to Display (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "Display"
if self.minimal_mode:
translated_tab_name = self.tab_name_mapping.get("Display", "Display") if hasattr(self, 'tab_name_mapping') else "Display"
self.set_title(f"Better Control - {translated_tab_name}")
elif (
self.arg_parser.find_arg(("-u", "--usbguard"))
and "USBGuard" in self.tab_pages
):
page_num = self.tab_pages["USBGuard"]
self.logging.log(LogLevel.Info, f"Setting active tab to USBGuard (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "USBGuard"
if self.minimal_mode:
translated_tab_name = self.tab_name_mapping.get("USBGuard", "USBGuard") if hasattr(self, 'tab_name_mapping') else "USBGuard"
self.set_title(f"Better Control - {translated_tab_name}")
elif (
self.arg_parser.find_arg(("-p", "--power"))
and "Power" in self.tab_pages
):
page_num = self.tab_pages["Power"]
self.logging.log(LogLevel.Info, f"Setting active tab to Power (page {page_num})")
self.notebook.set_current_page(page_num)
active_tab = "Power"
if self.minimal_mode:
translated_tab_name = self.tab_name_mapping.get("Power", "Power") if hasattr(self, 'tab_name_mapping') else "Power"
translated_tab_name = self.tab_name_mapping.get(requested_tab, requested_tab) if hasattr(self, 'tab_name_mapping') else requested_tab
self.set_title(f"Better Control - {translated_tab_name}")
else:
# Default to first tab instead of using last active tab from settings
Expand Down Expand Up @@ -1227,6 +1140,14 @@ def toggle_window_visibility():
self.hide()
else:
self.show()

active_tab = read_tab_from_file()

if active_tab and active_tab in self.tab_pages:
page_num = self.tab_pages[active_tab]
self.notebook.set_current_page(page_num)
GLib.idle_add(lambda: self.lazy_load_tab(self.notebook, None, page_num))

return False # Only run once

GLib.idle_add(toggle_window_visibility)
Expand Down
35 changes: 35 additions & 0 deletions src/utils/tab_name.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import os
from pathlib import Path
from utils.arg_parser import ArgParse


def tab_name_from_arguments(arg_parser: ArgParse):
active_tab = None

if arg_parser.find_arg(("-V", "--volume")) or arg_parser.find_arg(("-v", "")):
active_tab = "Volume"
elif arg_parser.find_arg(("-w", "--wifi")):
active_tab = "Wi-Fi"
elif arg_parser.find_arg(("-a", "--autostart")):
active_tab = "Autostart"
elif arg_parser.find_arg(("-b", "--bluetooth")):
active_tab = "Bluetooth"
elif arg_parser.find_arg(("-B", "--battery")):
active_tab = "Battery"
elif arg_parser.find_arg(("-d", "--display")):
active_tab = "Display"
elif arg_parser.find_arg(("-p", "--power")):
active_tab = "Power"
elif arg_parser.find_arg(("-u", "--usbguard")):
active_tab = "USBGuard"

return active_tab

def read_tab_from_file():
temp_dir = Path("/tmp/better-control")
tab_file_path = temp_dir / "tab.txt"

if os.path.exists(tab_file_path):
with open(tab_file_path, 'r', encoding='utf-8') as file:
arg_parser = ArgParse(["better-control"] + file.read().split(" "))
return tab_name_from_arguments(arg_parser)