update
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
import os
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("GLib", "2.0")
|
||||
import setproctitle
|
||||
from fabric import Application
|
||||
from fabric.utils import exec_shell_command_async, get_relative_path
|
||||
from gi.repository import GLib
|
||||
|
||||
from config.data import APP_NAME, APP_NAME_CAP, CACHE_DIR, CONFIG_FILE, HOME_DIR
|
||||
from modules.bar import Bar
|
||||
from modules.corners import Corners
|
||||
from modules.dock import Dock
|
||||
from modules.notch import Notch
|
||||
from modules.notifications import NotificationPopup
|
||||
from modules.updater import run_updater
|
||||
|
||||
fonts_updated_file = f"{CACHE_DIR}/fonts_updated"
|
||||
|
||||
if __name__ == "__main__":
|
||||
setproctitle.setproctitle(APP_NAME)
|
||||
|
||||
if not os.path.isfile(CONFIG_FILE):
|
||||
config_script_path = get_relative_path("config/config.py")
|
||||
exec_shell_command_async(f"python {config_script_path}")
|
||||
|
||||
current_wallpaper = os.path.expanduser("~/.current.wall")
|
||||
if not os.path.exists(current_wallpaper):
|
||||
example_wallpaper = os.path.expanduser(
|
||||
f"~/.config/{APP_NAME_CAP}/assets/wallpapers_example/example-1.jpg"
|
||||
)
|
||||
os.symlink(example_wallpaper, current_wallpaper)
|
||||
|
||||
# Load configuration
|
||||
from config.data import load_config
|
||||
|
||||
config = load_config()
|
||||
|
||||
GLib.idle_add(run_updater)
|
||||
# Every hour
|
||||
GLib.timeout_add(3600000, run_updater)
|
||||
|
||||
# Initialize multi-monitor services
|
||||
try:
|
||||
from utils.monitor_manager import get_monitor_manager
|
||||
from services.monitor_focus import get_monitor_focus_service
|
||||
from utils.global_keybinds import init_global_keybind_objects
|
||||
|
||||
monitor_manager = get_monitor_manager()
|
||||
monitor_focus_service = get_monitor_focus_service()
|
||||
monitor_manager.set_monitor_focus_service(monitor_focus_service)
|
||||
init_global_keybind_objects()
|
||||
|
||||
# Get all available monitors
|
||||
all_monitors = monitor_manager.get_monitors()
|
||||
multi_monitor_enabled = True
|
||||
except ImportError:
|
||||
# Fallback to single monitor mode
|
||||
all_monitors = [{'id': 0, 'name': 'default'}]
|
||||
monitor_manager = None
|
||||
multi_monitor_enabled = False
|
||||
|
||||
# Filter monitors based on selected_monitors configuration
|
||||
selected_monitors_config = config.get("selected_monitors", [])
|
||||
|
||||
# If selected_monitors is empty, show on all monitors (current behavior)
|
||||
if not selected_monitors_config:
|
||||
monitors = all_monitors
|
||||
print("Ax-Shell: No specific monitors selected, showing on all monitors")
|
||||
else:
|
||||
# Filter monitors to only include selected ones
|
||||
monitors = []
|
||||
selected_monitor_names = set(selected_monitors_config)
|
||||
|
||||
for monitor in all_monitors:
|
||||
monitor_name = monitor.get('name', f'monitor-{monitor.get("id", 0)}')
|
||||
if monitor_name in selected_monitor_names:
|
||||
monitors.append(monitor)
|
||||
print(f"Ax-Shell: Including monitor '{monitor_name}' (selected)")
|
||||
else:
|
||||
print(f"Ax-Shell: Excluding monitor '{monitor_name}' (not selected)")
|
||||
|
||||
# Fallback: if no valid monitors found, use all monitors
|
||||
if not monitors:
|
||||
print("Ax-Shell: No valid selected monitors found, falling back to all monitors")
|
||||
monitors = all_monitors
|
||||
|
||||
# Create application components list
|
||||
app_components = []
|
||||
corners = None
|
||||
notification = None
|
||||
|
||||
# Create components for each monitor
|
||||
for monitor in monitors:
|
||||
monitor_id = monitor['id']
|
||||
|
||||
# Create corners only for the first monitor (shared across all)
|
||||
if monitor_id == 0:
|
||||
corners = Corners()
|
||||
# Set corners visibility based on config
|
||||
corners_visible = config.get("corners_visible", True)
|
||||
corners.set_visible(corners_visible)
|
||||
app_components.append(corners)
|
||||
|
||||
# Create monitor-specific components
|
||||
if multi_monitor_enabled:
|
||||
bar = Bar(monitor_id=monitor_id)
|
||||
notch = Notch(monitor_id=monitor_id)
|
||||
dock = Dock(monitor_id=monitor_id)
|
||||
else:
|
||||
# Single monitor fallback
|
||||
bar = Bar()
|
||||
notch = Notch()
|
||||
dock = Dock()
|
||||
|
||||
# Connect bar and notch
|
||||
bar.notch = notch
|
||||
notch.bar = bar
|
||||
|
||||
# Create notification popup for the first monitor only
|
||||
if monitor_id == 0:
|
||||
notification = NotificationPopup(widgets=notch.dashboard.widgets)
|
||||
app_components.append(notification)
|
||||
|
||||
# Register instances in monitor manager if available
|
||||
if multi_monitor_enabled and monitor_manager:
|
||||
monitor_manager.register_monitor_instances(monitor_id, {
|
||||
'bar': bar,
|
||||
'notch': notch,
|
||||
'dock': dock,
|
||||
'corners': corners if monitor_id == 0 else None
|
||||
})
|
||||
|
||||
# Add components to app list
|
||||
app_components.extend([bar, notch, dock])
|
||||
|
||||
# Create the application with all components
|
||||
app = Application(f"{APP_NAME}", *app_components)
|
||||
|
||||
def set_css():
|
||||
app.set_stylesheet_from_file(
|
||||
get_relative_path("main.css"),
|
||||
)
|
||||
|
||||
app.set_css = set_css
|
||||
|
||||
app.set_css()
|
||||
|
||||
app.run()
|
||||
Reference in New Issue
Block a user