refactor(config): reorganize config.toml into sections

- Move all settings into [general], [dock], [panel], [switcher], [notification]
- Remove [desktop_widgets] section, move items to panel/general
- Add dot notation support to config service for nested keys
- Update all config references across codebase
This commit is contained in:
sankalp committed 2026-07-28 13:34:23 +05:45
1 parent 1d66b57ad7
commit f4689b8076
17 files changed
+204 -148

No files matched your search

+1 -1
View File
@@ -45,7 +45,7 @@ def setup_logger():
]:
logger.disable(log)
_debug = config().get("debug", False)
_debug = config().get("general.debug", False)
if not _debug:
logger.disable("modus_plugin_builtin_emoji")
else:
+34 -4
View File
@@ -47,17 +47,47 @@ class ConfigService:
self._initialized = True
def get(self, key: str, default: Any = None) -> Any:
return self._config.get(key, default)
"""Get a config value. Supports dot notation for nested keys (e.g. 'dock.enabled')."""
parts = key.split(".")
current = self._config
for part in parts:
if isinstance(current, dict):
current = current.get(part)
if current is None:
return default
else:
return default
return current
def get_all(self) -> Dict[str, Any]:
return self._config.copy()
def has_changed(self, key: str, old_config: Dict[str, Any]) -> bool:
return self._config.get(key) != old_config.get(key)
"""Check if a config value changed. Supports dot notation for nested keys."""
def _get_nested(d, k):
parts = k.split(".")
current = d
for part in parts:
if isinstance(current, dict):
current = current.get(part)
if current is None:
return None
else:
return None
return current
return _get_nested(self._config, key) != _get_nested(old_config, key)
def set(self, key: str, value: Any) -> None:
"""Set a config value (local state only)."""
self._config[key] = value
"""Set a config value (local state only). Supports dot notation for nested keys."""
parts = key.split(".")
current = self._config
for part in parts[:-1]:
if part not in current:
current[part] = {}
current = current[part]
current[parts[-1]] = value
def save(self) -> None:
"""Persist current in-memory config to disk."""
+8 -6
View File
@@ -238,9 +238,11 @@ class CachedNotifications(Notifications):
on_config_change(self._on_config_changed)
def _on_config_changed(self, new_config, old_config):
new_notif = new_config.get("notification", {})
# If ignored apps changed, remove them from history
if config().has_changed("notification_ignored_apps", old_config):
ignored_apps = new_config.get("notification_ignored_apps", [])
if config().has_changed("notification.ignored_apps", old_config):
ignored_apps = new_notif.get("ignored_apps", [])
ids_to_remove = [
cid
for cid, cnotif in self._cached_notifications.items()
@@ -254,8 +256,8 @@ class CachedNotifications(Notifications):
)
# If limited apps changed, prune duplicates
if config().has_changed("notification_limited_apps_history", old_config):
limited_apps = new_config.get("notification_limited_apps_history", [])
if config().has_changed("notification.limited_apps_history", old_config):
limited_apps = new_notif.get("limited_apps_history", [])
for app in limited_apps:
app_notifs = [
(cid, cnotif.timestamp)
@@ -355,7 +357,7 @@ class CachedNotifications(Notifications):
)
# Check if this app should be ignored for history (don't cache)
ignored_apps = config().get("notification_ignored_apps", [])
ignored_apps = config().get("notification.ignored_apps", [])
if notification.app_name in ignored_apps:
# Don't cache notifications from ignored apps, but still allow popup display
logger.debug(
@@ -395,7 +397,7 @@ class CachedNotifications(Notifications):
)
# Handle limited history apps - remove previous notifications from same app
limited_apps = config().get("notification_limited_apps_history", [])
limited_apps = config().get("notification.limited_apps_history", [])
if notification.app_name in limited_apps:
ids_to_remove = [
cid
+3 -2
View File
@@ -94,7 +94,7 @@ class KeyboardLayout(Service):
self._set_current(0, emit=False)
def _load_layouts_from_config(self) -> list[str]:
layouts = get_config("keyboard_layouts", DEFAULT_LAYOUTS)
layouts = get_config("general.keyboard_layouts", DEFAULT_LAYOUTS)
if not isinstance(layouts, list) or not layouts:
return list(DEFAULT_LAYOUTS)
return [str(layout).strip() for layout in layouts if str(layout).strip()]
@@ -199,7 +199,8 @@ class KeyboardLayout(Service):
# config changes
def _on_config_change(self, new_config, old_config):
new_layouts = new_config.get("keyboard_layouts")
new_general = new_config.get("general", {})
new_layouts = new_general.get("keyboard_layouts")
if not isinstance(new_layouts, list) or not new_layouts:
return
new_layouts = [str(item).strip() for item in new_layouts if str(item).strip()]
+7 -3
View File
@@ -5,7 +5,7 @@ from fabric.utils import Gio, GLib, logger
from services.config import get_config, on_config_change
_CONFIG_KEY = "night_light_temperature"
_CONFIG_KEY = "panel.night_light_temperature"
_DEFAULT_TEMPERATURE = 4500
_NEUTRAL_TEMPERATURE = 6000
_PROFILE_TEMP_RE = re.compile(r"(\d{3,5})")
@@ -106,9 +106,13 @@ class NightLightService(Service):
self._sync_state()
def _on_config_change(self, new_config, old_config):
if new_config.get(_CONFIG_KEY) == old_config.get(_CONFIG_KEY):
new_panel = new_config.get("panel", {})
old_panel = old_config.get("panel", {})
new_temp = new_panel.get("night_light_temperature")
old_temp = old_panel.get("night_light_temperature")
if new_temp == old_temp:
return
self.set_temperature(_coerce_temperature(new_config.get(_CONFIG_KEY)))
self.set_temperature(_coerce_temperature(new_temp))
def _set_active(self, value: bool):
if value != self._active:
+4 -2
View File
@@ -372,7 +372,9 @@ class Weather(Service):
self.emit("ready")
def _on_config_changed(self, new_config: dict, old_config: dict) -> None:
if new_config.get("weather_location") != old_config.get("weather_location"):
new_general = new_config.get("general", {})
old_general = old_config.get("general", {})
if new_general.get("weather_location") != old_general.get("weather_location"):
self.refresh()
def _start_fetch_thread(self) -> None:
@@ -387,7 +389,7 @@ class Weather(Service):
from services.config import config
target_loc = config().get("weather_location", "").strip()
target_loc = config().get("general.weather_location", "").strip()
# Invalidate location cache if the config target changed
if location_data and location_data.get("config_location", "") != target_loc:
+1 -1
View File
@@ -20,7 +20,7 @@ def _get_wallpaper_path() -> str:
try:
from services.config import get_config
custom = get_config("wallpapers_dir")
custom = get_config("general.wallpapers_dir")
if custom:
expanded = os.path.expanduser(str(custom))
if not os.path.isabs(expanded):
+42 -32
View File
@@ -1,34 +1,44 @@
DEFAULT = {
"debug": False,
"dock_enabled": True,
"dock_auto_hide": True,
"dock_always_occluded": False,
"dock_icon_size": 52,
"hide_special_workspace": True,
"dock_hide_special_workspace_apps": True,
"notification_timeout": "5s",
"notification_ignored_apps": ["Hyprshot"],
"notification_limited_apps_history": ["Spotify"],
"imac_button": True,
"systray": True,
"control_center": True,
"search": True,
"global_menu": True,
"network": True,
"battery": True,
"notification_center": True,
"workspace_indicator": True,
"bluetooth": True,
"date_time": True,
"night_light_temperature": 4500,
"notch": True,
"custom_mods": True,
"keyboard_layouts": ["us"],
"switcher_live_preview": True,
"switcher_live_preview_delay_ms": 200,
"systray_ignore": ["blueman", "network"],
"wallpapers_dir": "src/assets/wallpaper_example/",
"osd": True,
"window_switcher": True,
"weather_location": "",
"general": {
"debug": False,
"wallpapers_dir": "src/assets/wallpaper_example/",
"keyboard_layouts": ["us"],
"weather_location": "",
},
"dock": {
"enabled": True,
"auto_hide": True,
"always_occluded": False,
"icon_size": 52,
"hide_special_workspace_apps": True,
},
"panel": {
"imac_button": True,
"systray": True,
"systray_ignore": ["blueman", "network"],
"control_center": True,
"search": True,
"global_menu": True,
"network": True,
"battery": True,
"notification_center": True,
"workspace_indicator": True,
"bluetooth": True,
"date_time": True,
"night_light_temperature": 4500,
"notch": True,
"osd": True,
"hide_special_workspace": True,
"custom_mods": True,
},
"switcher": {
"live_preview": True,
"live_preview_delay_ms": 200,
"window_switcher": True,
},
"notification": {
"timeout": "5s",
"ignored_apps": ["Hyprshot"],
"limited_apps_history": ["Spotify"],
},
}
+1 -1
View File
@@ -123,7 +123,7 @@ class DockCanvas(Gtk.DrawingArea):
self.set_visual(visual)
def _base_icon_size(self) -> int:
return int(config().get("dock_icon_size", 52))
return int(config().get("dock.icon_size", 52))
def _icon_cache_size(self) -> int:
return int(self._base_icon_size() * MAX_SCALE)
+10 -10
View File
@@ -69,7 +69,7 @@ class Dock(Window):
on_config_change(self._on_config_change)
if config().get("dock_auto_hide", True):
if config().get("dock.auto_hide", True):
self._setup_occlusion_signals()
self._check_occlusion_deferred()
@@ -104,7 +104,7 @@ class Dock(Window):
try:
if not config().get("dock_auto_hide", True):
return False
is_occ = config().get("dock_always_occluded", False) or check_occlusion(
is_occ = config().get("dock.always_occluded", False) or check_occlusion(
("bottom", self.dock_height)
)
if is_occ and not self.is_hovered and self.revealer.get_reveal_child():
@@ -119,24 +119,24 @@ class Dock(Window):
return False
def _on_config_change(self, new_config, old_config) -> None:
if config().has_changed("dock_enabled", old_config):
if config().has_changed("dock.enabled", old_config):
self._update_visibility()
if config().has_changed("dock_icon_size", old_config):
if config().has_changed("dock.icon_size", old_config):
self.canvas.update_icon_size()
if config().has_changed("dock_auto_hide", old_config):
if new_config.get("dock_auto_hide", True):
if config().has_changed("dock.auto_hide", old_config):
if new_config.get("dock.auto_hide", True):
self._setup_occlusion_signals()
else:
self._disconnect_occlusion_signals()
self.revealer.set_reveal_child(True)
if config().has_changed("dock_hide_special_workspace_apps", old_config):
if config().has_changed("dock.hide_special_workspace_apps", old_config):
self.canvas._rebuild_model()
def _update_visibility(self) -> None:
if config().get("dock_enabled", True):
if config().get("dock.enabled", True):
self.show()
self.revealer.set_reveal_child(True)
else:
@@ -154,9 +154,9 @@ class Dock(Window):
def delayed_hide(t):
if t == self.hide_ticket and not self.is_hovered:
if config().get("dock_auto_hide", True):
if config().get("dock.auto_hide", True):
is_occ = config().get(
"dock_always_occluded", False
"dock.always_occluded", False
) or check_occlusion(("bottom", self.dock_height))
if is_occ:
self.revealer.set_reveal_child(False)
+16 -11
View File
@@ -837,7 +837,7 @@ class NotificationWidget(Box):
"""Get the current notification timeout from config manager."""
try:
timeout_str = get_config(
"notification_timeout", data.NOTIFICATION_TIMEOUT_STR
"notification.timeout", data.NOTIFICATION_TIMEOUT_STR
)
from shared.data import parse_timeout_string
@@ -1472,13 +1472,13 @@ class ModusNoti(Window):
def _apply_initial_config(self):
try:
timeout_val = get_config(
"notification_timeout", data.NOTIFICATION_TIMEOUT_STR
"notification.timeout", data.NOTIFICATION_TIMEOUT_STR
)
ignored_apps = get_config(
"notification_ignored_apps", data.NOTIFICATION_IGNORED_APPS_HISTORY
"notification.ignored_apps", data.NOTIFICATION_IGNORED_APPS_HISTORY
)
limited_apps = get_config(
"notification_limited_apps_history",
"notification.limited_apps_history",
data.NOTIFICATION_LIMITED_APPS_HISTORY,
)
initial = {
@@ -1493,14 +1493,19 @@ class ModusNoti(Window):
def _on_config_changed(self, new_config: dict, old_config: dict):
try:
new_notif = new_config.get("notification", {})
old_notif = old_config.get("notification", {})
changes = {}
for key in (
"notification_timeout",
"notification_ignored_apps",
"notification_limited_apps_history",
):
if key in new_config and new_config.get(key) != old_config.get(key):
changes[key] = new_config.get(key)
key_map = {
"timeout": "notification_timeout",
"ignored_apps": "notification_ignored_apps",
"limited_apps_history": "notification_limited_apps_history",
}
for new_key, local_key in key_map.items():
if new_key in new_notif and new_notif.get(new_key) != old_notif.get(
new_key
):
changes[local_key] = new_notif.get(new_key)
if changes:
self.update_config(changes)
+4 -4
View File
@@ -40,14 +40,14 @@ class OSD(Box):
def show_audio_osd(self):
from services.config import get_config
if not get_config("osd", True):
if not get_config("panel.osd", True):
return
self.show_container(self.containers.get("audio"))
def show_brightness_osd(self):
from services.config import get_config
if not get_config("osd", True):
if not get_config("panel.osd", True):
return
self.show_container(self.containers.get("brightness"))
@@ -71,13 +71,13 @@ class OSDWindow(Window):
def osd_show_audio(self):
from services.config import get_config
if not get_config("osd", True):
if not get_config("panel.osd", True):
return
self.osd.containers["audio"].update()
def osd_show_brightness(self):
from services.config import get_config
if not get_config("osd", True):
if not get_config("panel.osd", True):
return
self.osd.containers["brightness"].update()
@@ -12,7 +12,7 @@ _tracked_items = weakref.WeakSet()
def should_hide(item) -> bool:
"""Check if a tray item should be hidden based on config."""
ignore_list = get_config("systray_ignore", [])
ignore_list = get_config("panel.systray_ignore", [])
if not ignore_list:
return False
+8 -14
View File
@@ -29,25 +29,19 @@ class WorkspaceIndicator(Box):
self._apply_initial_config()
def _apply_initial_config(self):
new_value = get_config("hide_special_workspace", True)
new_value = get_config("panel.hide_special_workspace", True)
if new_value != self._current_config["hide_special_workspace"]:
self._current_config["hide_special_workspace"] = new_value
self.update_config({"hide_special_workspace": new_value})
def _on_config_changed(self, new_config: dict, old_config: dict):
if "hide_special_workspace" in new_config and new_config.get(
"hide_special_workspace"
) != old_config.get("hide_special_workspace"):
self._current_config["hide_special_workspace"] = new_config.get(
"hide_special_workspace", True
)
self.update_config(
{
"hide_special_workspace": self._current_config[
"hide_special_workspace"
]
}
)
new_panel = new_config.get("panel", {})
old_panel = old_config.get("panel", {})
new_val = new_panel.get("hide_special_workspace", True)
old_val = old_panel.get("hide_special_workspace", True)
if new_val != old_val:
self._current_config["hide_special_workspace"] = new_val
self.update_config({"hide_special_workspace": new_val})
def _get_button_factory(self):
if self._current_config.get("hide_special_workspace", True):
+24 -16
View File
@@ -253,10 +253,12 @@ class Panel(Window):
if config_data is None:
config_data = get_config_all()
panel = config_data.get("panel", {})
# Update indicator visibility directly
battery_visible = config_data.get("battery", True)
network_visible = config_data.get("network", True)
bluetooth_visible = config_data.get("bluetooth", True)
battery_visible = panel.get("battery", True)
network_visible = panel.get("network", True)
bluetooth_visible = panel.get("bluetooth", True)
self.battery_indicator.set_visible(battery_visible)
self.network_indicator.set_visible(network_visible)
@@ -271,16 +273,16 @@ class Panel(Window):
self.bluetooth_indicator.update_state()
# Center (notch)
if config_data.get("notch", True):
if panel.get("notch", True):
self.center_box.children = [self.notch]
else:
self.center_box.children = []
# Left
left_children = []
if config_data.get("imac_button", True):
if panel.get("imac_button", True):
left_children.append(self.imac)
if config_data.get("global_menu", True):
if panel.get("global_menu", True):
left_children.append(self.globalmenu)
for child in left_children:
@@ -289,23 +291,23 @@ class Panel(Window):
# Right
right_children = []
if config_data.get("custom_mods", True):
if panel.get("custom_mods", True):
right_children.append(self.custom_mods)
if config_data.get("workspace_indicator", True):
if panel.get("workspace_indicator", True):
right_children.append(self.workspace_indicator)
if config_data.get("systray", True):
if panel.get("systray", True):
right_children.extend([self.tray_revealer, self.chevron_button])
right_children.append(self.indicators)
if config_data.get("search", True):
if panel.get("search", True):
right_children.append(self.search)
if config_data.get("control_center", True):
if panel.get("control_center", True):
right_children.append(self.control_center_btn)
if config_data.get("date_time", True):
if panel.get("date_time", True):
right_children.append(self.datetime_btn)
if config_data.get("notification_center", True):
if panel.get("notification_center", True):
right_children.append(self.notification_center_btn)
for child in right_children:
@@ -321,11 +323,13 @@ class Panel(Window):
def _on_config_changed(self, new_config, old_config):
logger.debug("Config changed, checking keys...")
keys = {
new_panel = new_config.get("panel", {})
old_panel = old_config.get("panel", {})
panel_keys = {
"imac_button",
"global_menu",
"notch",
"custom_mods",
"workspace_indicator",
"systray",
"battery",
@@ -335,8 +339,12 @@ class Panel(Window):
"control_center",
"date_time",
"notification_center",
"custom_mods",
"hide_special_workspace",
}
changed_keys = [k for k in keys if new_config.get(k) != old_config.get(k)]
changed_keys = [k for k in panel_keys if new_panel.get(k) != old_panel.get(k)]
if changed_keys:
logger.debug(f"Rebuilding due to changes in: {changed_keys}")
self._rebuild_layout_from_config(new_config)
+31 -31
View File
@@ -335,37 +335,37 @@ class SettingsWindow(Gtk.Window):
[
SettingsRow(
"Debug Mode",
SettingsSwitch("debug"),
SettingsSwitch("general.debug"),
"Enable verbose logging for development",
),
SettingsRow(
"Weather Location",
SettingsEntry("weather_location"),
SettingsEntry("general.weather_location"),
"City name for weather updates",
),
SettingsRow(
"Keyboard Layouts",
SettingsList("keyboard_layouts"),
SettingsList("general.keyboard_layouts"),
"Manage active keyboard input languages",
),
SettingsRow(
"Hide Special Workspace",
SettingsSwitch("hide_special_workspace"),
SettingsSwitch("panel.hide_special_workspace"),
"Don't show special workspace in indicators",
),
SettingsRow(
"Night Light Temperature",
SettingsEntry("night_light_temperature"),
SettingsEntry("panel.night_light_temperature"),
"Color temperature in Kelvin (e.g. 4500)",
),
SettingsRow(
"Live Preview",
SettingsSwitch("switcher_live_preview"),
SettingsSwitch("switcher.live_preview"),
"Show live window previews in switcher",
),
SettingsRow(
"Preview Delay (ms)",
SettingsEntry("switcher_live_preview_delay_ms"),
SettingsEntry("switcher.live_preview_delay_ms"),
"Delay before live preview appears",
),
],
@@ -377,27 +377,27 @@ class SettingsWindow(Gtk.Window):
[
SettingsRow(
"Enabled",
SettingsSwitch("dock_enabled"),
SettingsSwitch("dock.enabled"),
"Show the application dock",
),
SettingsRow(
"Auto Hide",
SettingsSwitch("dock_auto_hide"),
SettingsSwitch("dock.auto_hide"),
"Hide dock when not in use",
),
SettingsRow(
"Always Occluded",
SettingsSwitch("dock_always_occluded"),
SettingsSwitch("dock.always_occluded"),
"Keep dock behind other windows",
),
SettingsRow(
"Icon Size",
SettingsEntry("dock_icon_size"),
SettingsEntry("dock.icon_size"),
"Size of dock icons in pixels",
),
SettingsRow(
"Hide Special Apps",
SettingsSwitch("dock_hide_special_workspace_apps"),
SettingsSwitch("dock.hide_special_workspace_apps"),
"Hide apps from special workspace in dock",
),
],
@@ -407,72 +407,72 @@ class SettingsWindow(Gtk.Window):
rows = [
SettingsRow(
"Global Menu",
SettingsSwitch("global_menu"),
SettingsSwitch("panel.global_menu"),
"Show application menu in the panel",
),
SettingsRow(
"iMac Button",
SettingsSwitch("imac_button"),
SettingsSwitch("panel.imac_button"),
),
SettingsRow(
"Systray",
SettingsSwitch("systray"),
SettingsSwitch("panel.systray"),
),
SettingsRow(
"Control Center",
SettingsSwitch("control_center"),
SettingsSwitch("panel.control_center"),
),
SettingsRow(
"Search",
SettingsSwitch("search"),
SettingsSwitch("panel.search"),
),
SettingsRow(
"Network",
SettingsSwitch("network"),
SettingsSwitch("panel.network"),
),
SettingsRow(
"Battery",
SettingsSwitch("battery"),
SettingsSwitch("panel.battery"),
),
SettingsRow(
"Bluetooth",
SettingsSwitch("bluetooth"),
SettingsSwitch("panel.bluetooth"),
),
SettingsRow(
"Date & Time",
SettingsSwitch("date_time"),
SettingsSwitch("panel.date_time"),
),
SettingsRow(
"Workspace Indicator",
SettingsSwitch("workspace_indicator"),
SettingsSwitch("panel.workspace_indicator"),
),
SettingsRow(
"Notification Center",
SettingsSwitch("notification_center"),
SettingsSwitch("panel.notification_center"),
),
SettingsRow(
"Custom Mods",
SettingsSwitch("custom_mods"),
SettingsSwitch("panel.custom_mods"),
"Enable custom Hyprland mods in panel",
),
SettingsRow(
"Window Switcher",
SettingsSwitch("window_switcher"),
SettingsSwitch("switcher.window_switcher"),
"Enable Alt+Tab window switcher",
),
SettingsRow(
"OSD",
SettingsSwitch("osd"),
SettingsSwitch("panel.osd"),
"Enable on-screen display for volume/brightness",
),
SettingsRow(
"Wallpapers Directory",
SettingsEntry("wallpapers_dir"),
SettingsEntry("general.wallpapers_dir"),
"Path to wallpapers folder",
),
SettingsRow(
"Systray Ignore",
SettingsList("systray_ignore"),
SettingsList("panel.systray_ignore"),
"Icons to hide from the system tray",
),
]
@@ -485,17 +485,17 @@ class SettingsWindow(Gtk.Window):
[
SettingsRow(
"Timeout",
SettingsEntry("notification_timeout"),
SettingsEntry("notification.timeout"),
"How long notifications stay on screen (e.g. 5s)",
),
SettingsRow(
"Ignored Apps",
SettingsList("notification_ignored_apps"),
SettingsList("notification.ignored_apps"),
"Apps that won't show notifications",
),
SettingsRow(
"Limited History",
SettingsList("notification_limited_apps_history"),
SettingsList("notification.limited_apps_history"),
"Apps with only the latest notification shown",
),
],
+9 -9
View File
@@ -120,9 +120,9 @@ class ApplicationSwitcher(Window):
self.set_visible(False)
def _on_config_changed(self, new_config, old_config):
preview_changed = config().has_changed("switcher_live_preview", old_config)
preview_changed = config().has_changed("switcher.live_preview", old_config)
if (
config().has_changed("hide_special_workspace", old_config)
config().has_changed("panel.hide_special_workspace", old_config)
or preview_changed
):
if preview_changed:
@@ -133,7 +133,7 @@ class ApplicationSwitcher(Window):
self._rebuild()
def show_switcher(self) -> None:
if not config().get("window_switcher", True):
if not config().get("switcher.window_switcher", True):
return
self._rebuild()
if not self.windows:
@@ -180,7 +180,7 @@ class ApplicationSwitcher(Window):
return pixbuf
def _create_item(self) -> _SwitcherItem:
use_preview = config().get("switcher_live_preview", True)
use_preview = config().get("switcher.live_preview", True)
if use_preview:
app_icon = Image(name="app-switcher-app-icon")
@@ -300,7 +300,7 @@ class ApplicationSwitcher(Window):
item.button.set_visible(False)
return
hide_special = config().get("hide_special_workspace", True)
hide_special = config().get("panel.hide_special_workspace", True)
filtered = []
for c in clients:
if c.get("hidden", False):
@@ -333,7 +333,7 @@ class ApplicationSwitcher(Window):
)
self.current_index = idx
use_preview = config().get("switcher_live_preview", True)
use_preview = config().get("switcher.live_preview", True)
display = Gdk.Display.get_default()
monitor = display.get_primary_monitor() if display else None
@@ -430,7 +430,7 @@ class ApplicationSwitcher(Window):
self._update_selection()
self._addr_to_idx = {w["address"]: i for i, w in enumerate(self.windows)}
use_preview = config().get("switcher_live_preview", True)
use_preview = config().get("switcher.live_preview", True)
if use_preview:
self._capture_queue = [w["address"] for w in self.windows]
self._current_capture_addr = None
@@ -574,7 +574,7 @@ class ApplicationSwitcher(Window):
item.preview_image.set_from_pixbuf(pixbuf)
if self.get_visible() and config().get("switcher_live_preview", True):
fps_delay = config().get("switcher_live_preview_delay_ms", 200)
fps_delay = config().get("switcher.live_preview_delay_ms", 200)
invoke_repeater(
fps_delay,
lambda: (
@@ -604,7 +604,7 @@ class ApplicationSwitcher(Window):
)
def _pump_capture_queue(self):
use_preview = config().get("switcher_live_preview", True)
use_preview = config().get("switcher.live_preview", True)
if not use_preview:
return