systray: Change window tracking a bit

We should only prevent app closing if the systray is actually embedded
This commit is contained in:
Cole Robinson 2018-03-17 11:46:38 -04:00
parent 9ec865e4c0
commit 483a8de6c1
2 changed files with 13 additions and 7 deletions

View File

@ -32,6 +32,7 @@ from .baseclass import vmmGObject
from .connect import vmmConnect
from .connmanager import vmmConnectionManager
from .inspection import vmmInspection
from .systray import vmmSystray
DETAILS_PERF = 1
DETAILS_CONFIG = 2
@ -96,7 +97,6 @@ class vmmEngine(vmmGObject):
"""
Actual startup routines if we are running a new instance of the app
"""
from .systray import vmmSystray
vmmSystray.get_instance()
vmmInspection.get_instance()
@ -313,7 +313,6 @@ class vmmEngine(vmmGObject):
return 1
def _handle_tick_error(self, msg, details):
from .systray import vmmSystray
if (self._window_count == 1 and
vmmSystray.get_instance().is_visible()):
# This means the systray icon is running. Don't raise an error
@ -359,8 +358,17 @@ class vmmEngine(vmmGObject):
self._exit_app_if_no_windows()
def _systray_is_embedded(self):
"""
We don't use window tracking here: systray isn't a window and even
when 'show' has been requested it may not be embedded in a visible
tray area, so we have to check it separately.
"""
return vmmSystray.get_instance().is_embedded()
def _can_exit(self):
return self._window_count <= 0
return (self._window_count <= 0 and not
self._systray_is_embedded())
def _exit_app_if_no_windows(self):
if self._can_exit():

View File

@ -25,7 +25,6 @@ from gi.repository import Gtk
from . import vmmenu
from .baseclass import vmmGObject
from .connmanager import vmmConnectionManager
from .engine import vmmEngine
class vmmSystray(vmmGObject):
@ -60,7 +59,7 @@ class vmmSystray(vmmGObject):
for conn in connmanager.conns.values():
self._conn_added(connmanager, conn)
def is_visible(self):
def is_embedded(self):
return (self.systray_icon and
self.systray_icon.is_embedded())
@ -97,14 +96,12 @@ class vmmSystray(vmmGObject):
self.systray_icon.connect("activate", self.systray_activate)
self.systray_icon.connect("popup-menu", self.systray_popup)
self.systray_icon.set_tooltip_text(_("Virtual Machine Manager"))
vmmEngine.get_instance().increment_window_counter()
def _hide(self):
if not self.systray_icon:
return
self.systray_icon.set_visible(False)
self.systray_icon = None
vmmEngine.get_instance().decrement_window_counter()
def _show_systray_changed_cb(self):
do_show = self.config.get_view_system_tray()
@ -295,4 +292,5 @@ class vmmSystray(vmmGObject):
menu.update_widget_states(vm)
def exit_app(self, _src):
from .engine import vmmEngine
vmmEngine.get_instance().exit_app()