diff --git a/xpra/gtk/__init__.py b/xpra/gtk/__init__.py index 587ffe0e38..cc1c9c96d5 100644 --- a/xpra/gtk/__init__.py +++ b/xpra/gtk/__init__.py @@ -2,9 +2,3 @@ # Copyright (C) 2013-2020 Antoine Martin # Xpra is released under the terms of the GNU GPL v2, or, at your option, any # later version. See the file COPYING for details. - -from xpra.os_util import gi_import -gi_import("Gdk") -gi_import("Gtk") -gi_import("Pango") -gi_import("GdkPixbuf") diff --git a/xpra/gtk/configure/common.py b/xpra/gtk/configure/common.py index b73bed28bc..bf30fe6fb6 100644 --- a/xpra/gtk/configure/common.py +++ b/xpra/gtk/configure/common.py @@ -17,9 +17,6 @@ log = Logger("util") -GLib = gi_import("GLib") -Gtk = gi_import("Gtk") - DISCLAIMER = """ IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, @@ -102,6 +99,7 @@ def with_config(cb: Callable) -> None: # then run the callback in the UI thread def load_config(): defaults = make_defaults_struct() + GLib = gi_import("GLib") GLib.idle_add(cb, defaults) start_thread(load_config, "load-config", daemon=True) @@ -120,6 +118,7 @@ def run_gui(gui_class) -> int: install_signal_handlers("xpra-configure-gui", gui.app_signal) ready() gui.show() + Gtk = gi_import("Gtk") Gtk.main() log("do_main() gui.exit_code=%i", gui.exit_code) return 0 diff --git a/xpra/gtk/configure/home.py b/xpra/gtk/configure/home.py new file mode 100644 index 0000000000..5ffedfa060 --- /dev/null +++ b/xpra/gtk/configure/home.py @@ -0,0 +1,54 @@ +# This file is part of Xpra. +# Copyright (C) 2018-2024 Antoine Martin +# Xpra is released under the terms of the GNU GPL v2, or, at your option, any +# later version. See the file COPYING for details. + +from importlib import import_module + +from xpra.gtk.configure.common import run_gui +from xpra.os_util import LINUX +from xpra.gtk.dialogs.base_gui_window import BaseGUIWindow +from xpra.gtk.widget import label + + +class HomeGUI(BaseGUIWindow): + + def __init__(self): + super().__init__( + "Configure Xpra", + "toolbox.png", + wm_class=("xpra-configure-gui", "Xpra Configure GUI"), + default_size=(480, 300), + header_bar=(False, False), + ) + self.dialogs: dict[str, BaseGUIWindow] = {} + + def populate(self): + self.vbox.add(label("Configure Xpra", font="sans 20")) + self.vbox.add(label("Tune your xpra configuration:", font="sans 14")) + if LINUX: + self.sub("Packages", "package.png", "Install or remove xpra packages", "packages") + self.sub("Features", "features.png", "Enable or disable feature groups", "features") + self.sub("Picture compression", "encoding.png", "Encodings, speed and quality", "encodings") + self.sub("GStreamer", "gstreamer.png", "Configure the GStreamer codecs", "gstreamer") + self.sub("OpenGL acceleration", "opengl.png", "Test and validate OpenGL renderer", "opengl") + + def sub(self, title="", icon_name="browse.png", tooltip="", configure: str = "") -> None: + + def callback(_btn): + dialog = self.dialogs.get(configure) + if dialog is None: + mod = import_module(f"xpra.gtk.configure.{configure}") + dialog = mod.ConfigureGUI(self) + self.dialogs[configure] = dialog + dialog.show() + self.ib(title, icon_name, tooltip, callback=callback) + + +def main(_args) -> int: + return run_gui(HomeGUI) + + +if __name__ == "__main__": + import sys + sys.exit(main(sys.argv[1:])) diff --git a/xpra/gtk/configure/main.py b/xpra/gtk/configure/main.py index c599a9fea6..aa33360be6 100644 --- a/xpra/gtk/configure/main.py +++ b/xpra/gtk/configure/main.py @@ -6,52 +6,16 @@ import os.path from importlib import import_module -from xpra.gtk.configure.common import get_user_config_file, run_gui +from xpra.platform import program_context +from xpra.gtk.configure.common import get_user_config_file from xpra.scripts.config import InitExit from xpra.exit_codes import ExitCode, ExitValue -from xpra.os_util import LINUX -from xpra.gtk.dialogs.base_gui_window import BaseGUIWindow -from xpra.gtk.widget import label - - -class ConfigureGUI(BaseGUIWindow): - - def __init__(self): - super().__init__( - "Configure Xpra", - "toolbox.png", - wm_class=("xpra-configure-gui", "Xpra Configure GUI"), - default_size=(480, 300), - header_bar=(False, False), - ) - self.dialogs: dict[str, BaseGUIWindow] = {} - - def populate(self): - self.vbox.add(label("Configure Xpra", font="sans 20")) - self.vbox.add(label("Tune your xpra configuration:", font="sans 14")) - if LINUX: - self.sub("Packages", "package.png", "Install or remove xpra packages", "packages") - self.sub("Features", "features.png", "Enable or disable feature groups", "features") - self.sub("Picture compression", "encoding.png", "Encodings, speed and quality", "encodings") - self.sub("GStreamer", "gstreamer.png", "Configure the GStreamer codecs", "gstreamer") - self.sub("OpenGL acceleration", "opengl.png", "Test and validate OpenGL renderer", "opengl") - - def sub(self, title="", icon_name="browse.png", tooltip="", configure: str = "") -> None: - - def callback(_btn): - dialog = self.dialogs.get(configure) - if dialog is None: - mod = import_module(f"xpra.gtk.configure.{configure}") - dialog = mod.ConfigureGUI(self) - self.dialogs[configure] = dialog - dialog.show() - self.ib(title, icon_name, tooltip, callback=callback) def main(args) -> ExitValue: - if args: + with program_context("Configure", "Configure"): conf = get_user_config_file() - subcommand = args[0] + subcommand = args[0] if args else "home" if subcommand == "reset": import datetime now = datetime.datetime.now() @@ -81,7 +45,6 @@ def main(args) -> ExitValue: if not mod: raise InitExit(ExitCode.FILE_NOT_FOUND, f"unknown configure subcommand {subcommand!r}") return mod.main(args[1:]) - return run_gui(ConfigureGUI) if __name__ == "__main__":