fix: resolve wifi crashes, shell injections, race conditions, and add debug mode

- Remove transient NEED_AUTH/DISCONNECTED error paths from wifi connect
- Guard double-callback in connect_wifi_bssid/connect_wifi_with_password
- Shell-quote user paths in wallpaper, screenshot, screenrecorder services
- Fix OSD hide-timer use-after-free and applet_window stale source ID
- Fix brightness poll timer leak on read failure
- Fix spotlight search stale idle source removal
- Lock dbusmenu _cache mutation under _registry_lock
- Fix entry.revision written outside _registry_lock scope
- Add fabric-cli exec wrapper for lock screen (lock_screen.lock())
- Replace hyprlock with lock screen in power menu and dropdown
- Add debug mode toggle in settings (controls log verbosity)
- Add diagnostic logging to globalmenu click chain
This commit is contained in:
sankalp committed 2026-07-16 11:47:53 +05:45
1 parent 4378959131
commit a47abda55a
26 files changed
+224 -57

No files matched your search

+25 -1
View File
@@ -372,9 +372,26 @@ class GlobalMenuService(Service):
"""Return the registry entry and PID for the currently active window."""
with self._state_lock:
pid = self._current_pid
if pid == 0:
logger.warning(
"[GlobalMenuService] _resolve_current_entry: _current_pid is 0"
)
return None, 0
with self._registry_lock:
svc = self._pid_to_service.get(pid)
entry = self._service_registry.get(svc) if svc else None
if not svc:
logger.warning(
f"[GlobalMenuService] _resolve_current_entry: no service for pid {pid}"
)
elif not entry:
logger.warning(
f"[GlobalMenuService] _resolve_current_entry: no entry for service '{svc}' (pid {pid})"
)
elif not entry.importer:
logger.warning(
f"[GlobalMenuService] _resolve_current_entry: importer is None for '{svc}' (pid {pid})"
)
return entry, pid
def _register_new_service(
@@ -510,7 +527,7 @@ class GlobalMenuService(Service):
entry = self._service_registry.get(svc_name)
if not entry or not entry.importer:
return
entry.revision = revision
entry.revision = revision
subtree = entry.importer.update_layout(parent_id, revision)
if subtree is None:
return
@@ -1066,8 +1083,15 @@ class GlobalMenuService(Service):
def click_item(self, item_id: int) -> bool:
entry, pid = self._resolve_current_entry()
if entry and entry.importer:
logger.debug(
f"[GlobalMenuService] click_item: item_id={item_id}, "
f"service={entry.service_name}, importer={type(entry.importer).__name__}"
)
entry.importer.click_item(item_id, pid=pid)
return True
logger.warning(
f"[GlobalMenuService] click_item FAILED: item_id={item_id}, entry={entry}, pid={pid}"
)
return False
def about_to_show(self, item_id: int) -> bool: