engine: connect conn-added in UI classes

This creates a weird situation where we pass the engine to those
classes UI functions, but this is a step towards untangling that.

While here, get rid of the conn-added connect magic and add a
simpler way to access the connection list from the engine
This commit is contained in:
Cole Robinson 2018-03-14 10:29:20 -04:00
parent 2dcfaafcac
commit befafe9dc7
6 changed files with 43 additions and 40 deletions

View File

@ -932,8 +932,7 @@ class vmmCreate(vmmGObjectUI):
model.clear()
default = -1
for c in list(self.engine.conns.values()):
connobj = c["conn"]
for connobj in self.engine.connobjs.values():
if not connobj.is_active():
continue
@ -956,7 +955,7 @@ class vmmCreate(vmmGObjectUI):
if not no_conns:
conn_list.set_active(default)
activeuri, activedesc = model[default]
activeconn = self.engine.conns[activeuri]["conn"]
activeconn = self.engine.connobjs[activeuri]
self.widget("create-conn-label").set_text(activedesc)
if len(model) <= 1:
@ -1428,7 +1427,7 @@ class vmmCreate(vmmGObjectUI):
uri = uiutil.get_list_selection(src)
newconn = None
if uri:
newconn = self.engine.conns[uri]["conn"]
newconn = self.engine.connobjs[uri]
# If we aren't visible, let reset_state handle this for us, which
# has a better chance of reporting error

View File

@ -111,6 +111,14 @@ class vmmEngine(vmmGObject):
self.tick()
@property
def connobjs(self):
ret = {}
for uri, conndict in self.conns.items():
ret[uri] = conndict["conn"]
return ret
############################
# Gtk Application handling #
############################
@ -169,7 +177,7 @@ class vmmEngine(vmmGObject):
def _init_systray(self):
self._systray = vmmSystray()
self._systray = vmmSystray(self)
self._systray.connect("action-toggle-manager", self._do_toggle_manager)
self._systray.connect("action-show-domain", self._do_show_vm)
self._systray.connect("action-migrate-domain", self._do_show_migrate)
@ -177,9 +185,6 @@ class vmmEngine(vmmGObject):
self._systray.connect("action-clone-domain", self._do_show_clone)
self._systray.connect("action-exit-app", self.exit_app)
self.connect("conn-added", self._systray.conn_added)
self.connect("conn-removed", self._systray.conn_removed)
self.add_gsettings_handle(
self.config.on_view_system_tray_changed(self._system_tray_changed))
@ -559,15 +564,6 @@ class vmmEngine(vmmGObject):
self.emit("conn-removed", uri)
self.config.remove_conn(uri)
def connect(self, name, callback, *args):
handle_id = vmmGObject.connect(self, name, callback, *args)
if name == "conn-added":
for conn_dict in list(self.conns.values()):
self.emit("conn-added", conn_dict["conn"])
return handle_id
def _check_conn(self, uri):
conn = self.conns.get(uri)
if conn:
@ -760,7 +756,7 @@ class vmmEngine(vmmGObject):
if self.windowManager:
return self.windowManager
obj = vmmManager()
obj = vmmManager(self)
obj.connect("action-migrate-domain", self._do_show_migrate)
obj.connect("action-delete-domain", self._do_delete_domain)
obj.connect("action-clone-domain", self._do_show_clone)
@ -773,9 +769,6 @@ class vmmEngine(vmmGObject):
obj.connect("manager-closed", self.decrement_window_counter)
obj.connect("remove-conn", self.remove_conn)
self.connect("conn-added", obj.add_conn)
self.connect("conn-removed", obj.remove_conn)
self.windowManager = obj
return self.windowManager

View File

@ -75,8 +75,12 @@ class vmmInspection(vmmGObject):
logging.debug("libguestfs gsetting enabled=%s", str(val))
if not val:
return
engine.connect("conn-added", self._conn_added)
engine.connect("conn-removed", self._conn_removed)
for conn in engine.connobjs.values():
self._conn_added(engine, conn)
self._start()
def _cleanup(self):
@ -85,14 +89,11 @@ class vmmInspection(vmmGObject):
self._conns = {}
self._cached_data = {}
# Called by the main thread whenever a connection is added or
# removed. We tell the inspection thread, so it can track
# connections.
def _conn_added(self, engine_ignore, conn):
def _conn_added(self, _engine, conn):
obj = ("conn_added", conn)
self._q.put(obj)
def _conn_removed(self, engine_ignore, uri):
def _conn_removed(self, _engine, uri):
obj = ("conn_removed", uri)
self._q.put(obj)

View File

@ -103,7 +103,7 @@ class vmmManager(vmmGObjectUI):
"remove-conn": (GObject.SignalFlags.RUN_FIRST, None, [str]),
}
def __init__(self):
def __init__(self, engine):
vmmGObjectUI.__init__(self, "manager.ui", "vmm-manager")
# Mapping of rowkey -> tree model rows to
@ -183,6 +183,11 @@ class vmmManager(vmmGObjectUI):
self.enable_polling(COL_NETWORK)
self.enable_polling(COL_MEM)
engine.connect("conn-added", self._conn_added)
engine.connect("conn-removed", self._conn_removed)
for conn in engine.connobjs.values():
self._conn_added(engine, conn)
##################
# Common methods #
@ -653,9 +658,7 @@ class vmmManager(vmmGObjectUI):
return row
def add_conn(self, engine_ignore, conn):
# Called from engine.py signal conn-added
def _conn_added(self, _engine, conn):
# Make sure error page isn't showing
self.widget("vm-notebook").set_current_page(0)
@ -676,7 +679,7 @@ class vmmManager(vmmGObjectUI):
for vm in conn.list_vms():
self.vm_added(conn, vm.get_connkey())
def remove_conn(self, engine_ignore, uri):
def _conn_removed(self, _engine, uri):
# Called from engine.py signal conn-removed
model = self.widget("vm-list").get_model()

View File

@ -130,8 +130,11 @@ class vmmMigrateDialog(vmmGObjectUI):
uiutil.init_combo_text_column(combo, 0)
# Hook up signals to get connection listing
engine.connect("conn-added", self._conn_added_cb)
engine.connect("conn-removed", self._conn_removed_cb)
engine.connect("conn-added", self._conn_added)
engine.connect("conn-removed", self._conn_removed)
for conn in engine.connobjs.values():
self._conn_added(engine, conn)
self.widget("migrate-dest").emit("changed")
self.widget("migrate-mode").set_tooltip_text(
@ -269,12 +272,10 @@ class vmmMigrateDialog(vmmGObjectUI):
self.widget("migrate-direct-box").set_visible(not is_tunnel)
self.widget("migrate-tunnel-box").set_visible(is_tunnel)
def _conn_added_cb(self, engine, conn):
ignore = engine
def _conn_added(self, _engine, conn):
self._conns[conn.get_uri()] = conn
def _conn_removed_cb(self, engine, uri):
ignore = engine
def _conn_removed(self, _engine, uri):
del(self._conns[uri])

View File

@ -40,7 +40,7 @@ class vmmSystray(vmmGObject):
"action-exit-app": (GObject.SignalFlags.RUN_FIRST, None, []),
}
def __init__(self):
def __init__(self, engine):
vmmGObject.__init__(self)
self.topwin = None
@ -59,6 +59,12 @@ class vmmSystray(vmmGObject):
self.show_systray()
engine.connect("conn-added", self._conn_added)
engine.connect("conn-removed", self._conn_removed)
for conn in engine.connobjs.values():
self._conn_added(engine, conn)
def is_visible(self):
return (self.config.get_view_system_tray() and
self.systray_icon and
@ -166,7 +172,7 @@ class vmmSystray(vmmGObject):
self.systray_menu.insert(self.conn_menuitems[uri], 0)
def conn_added(self, engine_ignore, conn):
def _conn_added(self, _engine, conn):
conn.connect("vm-added", self.vm_added)
conn.connect("vm-removed", self.vm_removed)
conn.connect("state-changed", self.conn_state_changed)
@ -188,7 +194,7 @@ class vmmSystray(vmmGObject):
self.conn_state_changed(conn)
self.populate_vm_list(conn)
def conn_removed(self, engine_ignore, uri):
def _conn_removed(self, _engine, uri):
if uri not in self.conn_menuitems:
return