File 081-systray-Cleanups-and-improvements-for-show-systray.patch of Package virt-manager
Subject: systray: Cleanups and improvements for --show-systray
From: Cole Robinson crobinso@redhat.com Sun Mar 3 11:54:37 2024 -0500
Date: Sun Mar 3 14:18:04 2024 -0500:
Git: a6b62a20b62ac86e0c40d18f188b312513bafdd9
- Add UI coverage
- Drop redundant systray_instance caching
- Tweaks help test and docs
- Show an error if the systray doesn't embed
Signed-off-by: Cole Robinson <crobinso@redhat.com>
diff --git a/man/virt-manager.rst b/man/virt-manager.rst
index e06a0ecc..44316ab3 100644
--- a/man/virt-manager.rst
+++ b/man/virt-manager.rst
@@ -88,6 +88,7 @@ URI.
``--show-host-summary``
Display the host/connection details window.
+
SYSTEM TRAY OPTION
==================
@@ -95,7 +96,8 @@ Connection autostart will not be disabled and thus don't require specifying a
manual ``--connect`` URI. But it supports ``--connect`` URI as well:
``--show-systray``
- Launch virt-manager in system tray
+ Launch virt-manager only in system tray
+
BUGS
====
diff --git a/tests/uitests/test_cli.py b/tests/uitests/test_cli.py
index e55ce396..e9f11db8 100644
--- a/tests/uitests/test_cli.py
+++ b/tests/uitests/test_cli.py
@@ -80,6 +80,19 @@ def testShowDelete(app):
app.wait_for_exit()
+def testShowSystray(app):
+ opts = ["--test-options=fake-systray", "--show-systray"]
+ app.open(use_uri=False,
+ extra_opts=opts,
+ window_name="vmm-fake-systray")
+ app.sleep(1)
+ app.stop()
+
+ app.open(uri="test:///default",
+ extra_opts=opts,
+ window_name="vmm-fake-systray")
+
+
def testShowRemoteDBusConnect(app):
"""
Test the remote app dbus connection
diff --git a/virtManager/engine.py b/virtManager/engine.py
index e5aa3eb4..ebc020ab 100644
--- a/virtManager/engine.py
+++ b/virtManager/engine.py
@@ -64,8 +64,6 @@ class vmmEngine(vmmGObject):
self._exiting = False
- self.systray_instance = None
-
self._window_count = 0
self._gtkapplication = None
self._init_gtk_application()
@@ -98,7 +96,7 @@ class vmmEngine(vmmGObject):
"""
Actual startup routines if we are running a new instance of the app
"""
- self.systray_instance = vmmSystray.get_instance()
+ vmmSystray.get_instance()
vmmInspection.get_instance()
self.add_gsettings_handle(
@@ -335,6 +333,30 @@ class vmmEngine(vmmGObject):
"""
return vmmSystray.get_instance().is_embedded()
+ def _show_systray_from_cli(self):
+ """
+ Handler for --show-systray from CLI.
+ We force show the systray, and wait for a timeout to report if
+ its embedded. If not we raise an error and exit the app
+ """
+ vmmSystray.get_instance().show_from_cli()
+
+ @_show_startup_error
+ def check(self, count):
+ count -= 1
+ if self._systray_is_embedded():
+ log.debug("systray embedded")
+ return
+ if count <= 0: # pragma: no cover
+ raise RuntimeError("systray did not show up")
+ self.timeout_add(1000, check, self, count) # pragma: no cover
+
+ startcount = 5
+ timeout = 1000
+ if self.config.CLITestOptions.fake_systray:
+ timeout = 1
+ self.timeout_add(timeout, check, self, startcount)
+
def _can_exit(self):
return (self._window_count <= 0 and not
self._systray_is_embedded())
@@ -445,8 +467,8 @@ class vmmEngine(vmmGObject):
self.CLI_SHOW_DOMAIN_DELETE]):
self._cli_show_vm_helper(uri, clistr, show_window)
elif show_window == self.CLI_SHOW_SYSTEM_TRAY:
- log.debug("Showing in the system tray")
- self.systray_instance._show_systray()
+ # Handled elsewhere
+ pass
else: # pragma: no cover
raise RuntimeError("Unknown cli window command '%s'" %
show_window)
@@ -466,12 +488,13 @@ class vmmEngine(vmmGObject):
log.debug("processing cli command uri=%s show_window=%s domain=%s",
uri, show_window, domain)
- if not uri:
- if show_window == self.CLI_SHOW_SYSTEM_TRAY:
- log.debug("Launching in the system tray without --connect")
- self.systray_instance._show_systray()
- return
+ if show_window == self.CLI_SHOW_SYSTEM_TRAY:
+ log.debug("Launching only in the system tray")
+ self._show_systray_from_cli()
+ if not uri:
+ return
+ elif not uri:
log.debug("No cli action requested, launching default window")
self._get_manager().show()
return
diff --git a/virtManager/systray.py b/virtManager/systray.py
index cba06cc1..a3cef04a 100644
--- a/virtManager/systray.py
+++ b/virtManager/systray.py
@@ -434,6 +434,9 @@ class vmmSystray(vmmGObject):
def is_embedded(self):
return self._systray and self._systray.is_embedded()
+ def show_from_cli(self):
+ self._show_systray()
+
def _cleanup(self):
self._hide_systray()
self._systray = None
diff --git a/virtManager/virtmanager.py b/virtManager/virtmanager.py
index 418fd336..e25c7628 100644
--- a/virtManager/virtmanager.py
+++ b/virtManager/virtmanager.py
@@ -156,7 +156,7 @@ def parse_commandline():
parser.add_argument("--show-host-summary", action="store_true",
help="Show connection details window")
parser.add_argument("--show-systray", action="store_true",
- help="Launch virt-manager in system tray")
+ help="Launch virt-manager only in system tray")
return parser.parse_known_args()