Files
Modus/src/main.py
T
sankalp 795e259e16 fix(panel): wire search button to toggle spotlight
- Add on_clicked handler to search button in panel
- Add set_spotlight_toggle() method on Panel
- Connect spotlight.toggle in main.py after both are created
2026-07-12 20:16:23 +05:45

123 lines
3.6 KiB
Python

import atexit
import os
# App-capture typelib path (built via meson in src/window/switcher/app-capture/builddir)
# Must be set before gi is imported so the typelib search path includes it.
# Note: LD_LIBRARY_PATH does not take effect in the current process, so the
# .so is preloaded via ctypes in window/switcher/main.py instead.
_app_capture_builddir = os.path.join(
os.path.dirname(__file__), "window", "switcher", "app-capture", "builddir"
)
if os.path.isdir(_app_capture_builddir):
_cur = os.environ.get("GI_TYPELIB_PATH", "")
if _app_capture_builddir not in _cur.split(os.pathsep):
os.environ["GI_TYPELIB_PATH"] = _app_capture_builddir + (
os.pathsep + _cur if _cur else ""
)
from fabric import Application
from fabric.utils import get_relative_path, logger, monitor_file
for log in [
"fabric",
"services",
"window",
"utils",
"globalmenu",
]:
logger.disable(log)
from services.keyboard_layout import KeyboardLayout
from shared.data import APP_NAME, load_config
from utils.functions import set_process_name
from window.desktop.widget import Deskwidgets
from window.dock import Dock
from window.notification.notification import ModusNoti
from window.osd.main import OSDWindow
from window.panel.main import Panel
from window.screencapture import ScreenCaptureWindow
from window.spotlight.main import SpotlightWindow
from window.switcher import ApplicationSwitcher
def main():
# Generate colors.css if it doesn't exist
colors_css_path = get_relative_path("styles/colors.css")
if not os.path.exists(colors_css_path):
from utils.utils import generate_colors_from_wallpaper
default_wallpaper = get_relative_path("assets/wallpaper_example/example-1.png")
if os.path.exists(default_wallpaper):
generate_colors_from_wallpaper(default_wallpaper)
set_process_name(APP_NAME)
load_config()
switcher = ApplicationSwitcher()
panel = Panel()
modusnoti = ModusNoti()
spotlight = SpotlightWindow()
panel.set_spotlight_toggle(spotlight.toggle)
deskwidget = Deskwidgets()
dock = Dock()
osd = OSDWindow()
screencapture = ScreenCaptureWindow()
# Monitor CSS files and subdirectories for changes
css_monitors = []
for root, dirs, files in os.walk(get_relative_path("styles/")):
monitor = monitor_file(root)
monitor.connect("changed", lambda *_: set_css())
css_monitors.append(monitor)
app = Application(
f"{APP_NAME}",
panel,
modusnoti,
deskwidget.top_left,
deskwidget.bottom_left,
osd,
switcher,
dock,
screencapture,
spotlight,
)
def set_css():
app.set_stylesheet_from_file(get_relative_path("styles/main.css"))
app.set_css = set_css
app.set_css()
def cleanup_css_monitors():
for m in css_monitors:
try:
m.cancel()
except Exception:
pass
atexit.register(cleanup_css_monitors)
# Inject into the executing module's namespace (__main__)
# to emulate what happened when this file was run directly.
# This allows fabric-cli exec to execute commands flawlessly.
import __main__
__main__.app = app
__main__.switcher = switcher
__main__.panel = panel
__main__.modusnoti = modusnoti
__main__.spotlight = spotlight
__main__.deskwidget = deskwidget
__main__.dock = dock
__main__.osd = osd
__main__.screencapture = screencapture
__main__.switch_keyboard_layout = KeyboardLayout.switch_keyboard_layout
app.run()
if __name__ == "__main__":
main()