diff -crN /home/upstream/virt-manager/src/virtManager/domain.py /home/migrate/virt-manager/src/virtManager/domain.py
*** /home/upstream/virt-manager/src/virtManager/domain.py	2008-09-08 13:26:52.000000000 +0900
--- /home/migrate/virt-manager/src/virtManager/domain.py	2008-09-08 13:28:52.000000000 +0900
***************
*** 950,953 ****
--- 950,980 ----
          # Invalidate cached xml
          self.xml = None
  
+     def migrate(self, dictcon):
+         flags = 0
+         if self.lastStatus == libvirt.VIR_DOMAIN_RUNNING:
+             flags = libvirt.VIR_MIGRATE_LIVE
+         self.vm.migrate(self.connection.vmm, flags, None, dictcon.get_short_hostname(), 0)
+ 
+     def migrate_domain_check(self, dictcon):
+         try:
+             # domain name
+             if dictcon.vmm.lookupByName(self.get_name()) is not None:
+                 raise vmmMigrateError, _("Name")
+         except libvirt.libvirtError:
+             pass
+ 
+         try:
+             # domain uuid
+             if dictcon.vmm.lookupByUUIDString(self.get_uuid()) is not None:
+                 raise vmmMigrateError, "UUID"
+         except libvirt.libvirtError:
+             pass
+ 
+ class vmmMigrateError(Exception):
+     def __init__(self, value):
+         self.value = value
+     def __str__(self):
+         return self.value
+ 
  gobject.type_register(vmmDomain)
diff -crN /home/upstream/virt-manager/src/virtManager/engine.py /home/migrate/virt-manager/src/virtManager/engine.py
*** /home/upstream/virt-manager/src/virtManager/engine.py	2008-09-08 13:26:52.000000000 +0900
--- /home/migrate/virt-manager/src/virtManager/engine.py	2008-09-08 13:30:53.000000000 +0900
***************
*** 37,42 ****
--- 37,44 ----
  from virtManager.host import vmmHost
  from virtManager.error import vmmErrorDialog
  from virtManager.serialcon import vmmSerialConsole
+ from virtManager.hostlist import vmmHostlist
+ from virtManager.domain import vmmMigrateError
  
  class vmmEngine(gobject.GObject):
      __gsignals__ = {
***************
*** 53,58 ****
--- 55,62 ----
          self.windowAbout = None
          self.windowCreate = None
          self.windowManager = None
+         self.windowMigrate = None
+         self.windowMigrateProgress = None
          self.connections = {}
          self.err = vmmErrorDialog(None,
                                    0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
***************
*** 185,190 ****
--- 189,202 ----
          self.connect_to_uri(uri)
      def _do_show_details(self, src, uri, uuid):
          self.show_details(uri, uuid)
+     def _do_show_host_list(self, src, uri, uuid):
+         self.show_host_list(uri, uuid)
+     def _do_close_host_list(self, src):
+         self.close_host_list()
+     def _do_show_migrate_progress(self, src, vm, conn):
+         self.show_migrate_progress(vm, conn)
+     def _do_migrate_domain(self, src, vm, conn):
+         self.migrate_domain(vm, conn)
      def _do_show_create(self, src, uri):
          self.show_create(uri)
      def _do_show_help(self, src, index):
***************
*** 321,326 ****
--- 333,391 ----
          self.connections[uri]["windowDetails"][uuid].show()
          return self.connections[uri]["windowDetails"][uuid]
  
+     def show_host_list(self, uri, uuid):
+         active_host_num = 0
+         for key in self.connections.keys():
+             if self.connections[key].has_key("connection") is True \
+             and (self.get_connection(key).get_state() == vmmConnection.STATE_ACTIVE or self.get_connection(key).get_state() == vmmConnection.STATE_INACTIVE) \
+             and key != uri:
+                 active_host_num = active_host_num + 1
+         if active_host_num < 1:
+             self._err_dialog_modal(_("Error: There is not a host to be able to be migrated."), None)
+             return
+ 
+         con = self.get_connection(uri)
+ 
+         if self.windowMigrate is None:
+             self.windowMigrate = vmmHostlist(self.get_config(), self.windowManager, con.get_vm(uuid))
+             self.windowMigrate.connect("action-migrate-domain", self._do_show_migrate_progress)
+             self.windowMigrate.connect("action-close-host-list", self._do_close_host_list)
+         else:
+             self.windowMigrate.set_vm(con.get_vm(uuid))
+             self.windowMigrate.set_label(con.get_vm(uuid).get_name())
+             self.windowMigrate.refresh_list()
+         self.windowMigrate.show()
+ 
+     def close_host_list(self):
+         self.windowMigrate.close()
+ 
+     def show_migrate_progress(self, vm, conn):
+         self.windowMigrateProgress = self._info_dialog_modal(_("%s is migrating from %s to %s." % \
+                             (vm.get_name(), vm.get_connection().get_short_hostname(), conn.get_short_hostname())))
+         self.migrate_domain(vm, conn)
+         if self.windowMigrateProgress is not None:
+             self.windowMigrateProgress.destroy()
+ 
+         self.close_host_list()
+         fromcon = vm.get_connection()
+         self.windowManager.conn_refresh_resources(fromcon)
+         self.windowManager.conn_refresh_resources(conn)
+ 
+     def migrate_domain(self, vm, conn):
+         try:
+             vm.migrate_domain_check(conn)
+             vm.migrate(conn)
+         except vmmMigrateError, e:
+             self.windowMigrateProgress.destroy()
+             self.windowMigrateProgress = None
+             self._err_dialog_modal(_("Error: %s has the domain that the %s is same as %s" % \
+                         (conn.get_short_hostname(), str(e), vm.get_name())), None)
+         except Exception, e:
+             self.windowMigrateProgress.destroy()
+             self.windowMigrateProgress = None
+             self._err_dialog_modal(_("Error migrating domain: %s" % str(e)),
+                         "".join(traceback.format_exc()))
+ 
      def get_manager(self):
          if self.windowManager == None:
              self.windowManager = vmmManager(self.get_config(), self)
***************
*** 341,346 ****
--- 406,412 ----
              self.windowManager.connect("action-connect", self._do_connect)
              self.windowManager.connect("action-refresh-console", self._do_refresh_console)
              self.windowManager.connect("action-refresh-terminal", self._do_refresh_terminal)
+             self.windowManager.connect("action-show-host-list", self._do_show_host_list)
              self.windowManager.connect("action-exit-app", self._do_exit_app)
          return self.windowManager
  
***************
*** 565,570 ****
--- 631,652 ----
          else:
              logging.warning("Reboot requested, but machine is already shutting down / shutoff")
  
+     def _info_dialog_modal(self, summary):
+         dg = vmmErrorDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING,
+                             gtk.BUTTONS_NONE, summary)
+         dg.set_title("info")
+         dg.show()
+         while gtk.events_pending():
+             gtk.main_iteration()
+         return dg
+ 
+ 
+     def _err_dialog_modal(self, summary, details):
+         dg = vmmErrorDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, 
+                             gtk.BUTTONS_CLOSE, summary, details)
+         dg.run()
+         dg.hide()
+         dg.destroy()
  
  
  gobject.type_register(vmmEngine)
diff -crN /home/upstream/virt-manager/src/virtManager/hostlist.py /home/migrate/virt-manager/src/virtManager/hostlist.py
*** /home/upstream/virt-manager/src/virtManager/hostlist.py	1970-01-01 09:00:00.000000000 +0900
--- /home/migrate/virt-manager/src/virtManager/hostlist.py	2008-09-08 13:34:24.000000000 +0900
***************
*** 0 ****
--- 1,172 ----
+ import gobject
+ import gtk
+ import gtk.glade
+ import logging
+ import sys
+ import traceback
+ 
+ import sparkline
+ import libvirt
+ 
+ from virtManager.connection import vmmConnection
+ from virtManager.asyncjob import vmmAsyncJob
+ from virtManager.error import vmmErrorDialog
+ from virtManager.manager import vmmManager
+ 
+ # fields in the tree model data set
+ ROW_HANDLE = 0
+ ROW_NAME = 1
+ ROW_URI = 2
+ 
+ # vmmManager fields in the tree model data set
+ MANAGER_ROW_HANDLE = 0
+ MANAGER_ROW_NAME = 1
+ MANAGER_ROW_ID = 2
+ MANAGER_ROW_STATUS = 3
+ MANAGER_ROW_STATUS_ICON = 4
+ MANAGER_ROW_CPU = 5
+ MANAGER_ROW_VCPUS = 6
+ MANAGER_ROW_MEM = 7
+ MANAGER_ROW_MEM_USAGE = 8
+ MANAGER_ROW_KEY = 9
+ 
+ class vmmHostlist(gobject.GObject):
+     __gsignals__ = {
+         "action-migrate-domain": (gobject.SIGNAL_RUN_FIRST,
+                                 gobject.TYPE_NONE, (object, object)),
+         "action-close-host-list": (gobject.SIGNAL_RUN_FIRST,
+                                 gobject.TYPE_NONE, (str, str)),
+                     }
+ 
+     def __init__(self, config, manager, vm):
+         self.__gobject_init__()
+         self.window = gtk.glade.XML(config.get_glade_dir() + "/vmm-hostlist.glade", "vmm-hostlist", domain="virt-manager")
+         self.config = config
+         self.manager = manager
+         self.vm = vm
+         self.prepare_hostlist()
+         self.hosthandle_list = {}
+         self.host_list = {}
+         self.hosturi_list = {}
+         self.host_list_max = 0
+ 
+         topwin = self.window.get_widget("vmm-hostlist")
+         topwin.hide()
+ 
+         self.window.signal_autoconnect({
+             "on_hostlist_delete_event": self.close,
+             "on_hostlist_cancel_clicked": self.close,
+             "on_hostlist_migrate_clicked": self.do_migrate_domain,
+             })
+ 
+         self.host_selected(None)
+         self.window.get_widget("host-list").get_selection().connect("changed", self.host_selected)
+         self.window.get_widget("hostlist-label").set_line_wrap(True)
+ 
+         self.window.get_widget("hostlist-cancel").set_sensitive(True)
+ 
+         self.get_host_list()
+         self.set_host_list()
+         self.set_label(self.vm.get_name())
+ 
+     def show(self):
+         dialog = self.window.get_widget("vmm-hostlist")
+         dialog.show_all()
+         dialog.present()
+ 
+     def close(self, src=None, src2=None):
+         self.window.get_widget("vmm-hostlist").hide()
+         return 1
+ 
+     def host_selected(self, selection):
+         if selection == None or selection.count_selected_rows() == 0:
+             self.window.get_widget("hostlist-migrate").set_sensitive(False)
+         else:
+             self.window.get_widget("hostlist-migrate").set_sensitive(True)
+ 
+     def do_migrate_domain(self, src=None):
+         hostlist = self.window.get_widget("host-list")
+         selection = hostlist.get_selection()
+         active = selection.get_selected()
+ 
+         self.emit("action-migrate-domain", self.vm, active[0].get_value(active[1], ROW_HANDLE))
+ 
+     def close_hostlist(self, src=None):
+         self.emit("action-close-host-list")
+ 
+     def prepare_hostlist(self):
+         hostlist = self.window.get_widget("host-list")
+ 
+         # Handle, name
+         model = gtk.TreeStore(object, str, str)
+         hostlist.set_model(model)
+ 
+         nameCol = gtk.TreeViewColumn(_("Name"))
+ 
+         hostlist.append_column(nameCol)
+ 
+         name_txt = gtk.CellRendererText()
+         nameCol.pack_start(name_txt, True)
+         nameCol.add_attribute(name_txt, 'text', 1)
+         nameCol.set_sort_column_id(ROW_NAME)
+ 
+         model.set_sort_func(ROW_NAME, self.hostlist_name_sorter)
+ 
+         model.set_sort_column_id(ROW_NAME, gtk.SORT_ASCENDING)
+ 
+     def hostlist_name_sorter(self, model, iter1, iter2):
+         return cmp(model.get_value(iter1, ROW_NAME), model.get_value(iter2, ROW_NAME))
+ 
+     def get_host_list(self):
+         vmlist = self.manager.window.get_widget("vm-list")
+         model = vmlist.get_model()
+         iter = model.get_iter_first()
+         while iter is not None:
+             if model.iter_parent(iter) is None \
+             and model.get_value(iter, MANAGER_ROW_KEY) != self.manager.current_vm().get_connection().get_uri() \
+             and (model.get_value(iter, MANAGER_ROW_HANDLE).state == vmmConnection.STATE_ACTIVE or model.get_value(iter, MANAGER_ROW_HANDLE).state == vmmConnection.STATE_INACTIVE):
+                 self.hosthandle_list[self.host_list_max] = model.get_value(iter, MANAGER_ROW_HANDLE)
+                 self.host_list[self.host_list_max] = str(model.get_value(iter, MANAGER_ROW_NAME))
+                 self.hosturi_list[self.host_list_max] = str(model.get_value(iter, MANAGER_ROW_KEY))
+                 self.host_list_max = self.host_list_max + 1
+             iter = model.iter_next(iter)
+ 
+     def set_host_list(self):
+         hostlist = self.window.get_widget("host-list")
+         model = hostlist.get_model()
+         model.clear()
+ 
+         row = []
+         row.insert(ROW_HANDLE, "HANDLE")
+         row.insert(ROW_NAME, "NAME")
+         row.insert(ROW_URI, "URI")
+         i = 0
+         while i < self.host_list_max:
+             row[ROW_HANDLE] = self.hosthandle_list[i]
+             row[ROW_NAME] = self.host_list[i]
+             row[ROW_URI] = self.hosturi_list[i]
+             iter = model.append(None, row)
+             i = i + 1
+ 
+     def refresh_list(self):
+         self.hosthandle_list = {}
+         self.host_list = {}
+         self.hosturi_list = {}
+         self.host_list_max = 0
+         self.get_host_list()
+         self.set_host_list()
+ 
+     def set_vm(self, vm):
+         self.vm = vm
+ 
+     def set_label(self, vm_name):
+         self.window.get_widget("hostlist-label").set_text(_("Choose a host that migrate %s from a list." % vm_name))
+ 
+     def _err_dialog(self, summary, details):
+         dg = vmmErrorDialog(None, 0, gtk.MESSAGE_ERROR,
+                             gtk.BUTTONS_CLOSE, summary, details)
+         dg.run()
+         dg.hide()
+         dg.destroy()
+ 
+ gobject.type_register(vmmHostlist)
diff -crN /home/upstream/virt-manager/src/virtManager/manager.py /home/migrate/virt-manager/src/virtManager/manager.py
*** /home/upstream/virt-manager/src/virtManager/manager.py	2008-09-08 13:26:52.000000000 +0900
--- /home/migrate/virt-manager/src/virtManager/manager.py	2008-09-08 13:32:31.000000000 +0900
***************
*** 101,106 ****
--- 101,108 ----
                             gobject.TYPE_NONE, [str]),
          "action-show-help": (gobject.SIGNAL_RUN_FIRST,
                                 gobject.TYPE_NONE, [str]),
+         "action-show-host-list": (gobject.SIGNAL_RUN_FIRST,
+                                   gobject.TYPE_NONE, (str,str)),
          "action-exit-app": (gobject.SIGNAL_RUN_FIRST,
                              gobject.TYPE_NONE, []),}
  
***************
*** 198,206 ****
          self.vmmenushutdown_items["forcepoweroff"].connect("activate", self.destroy_vm)
          self.vmmenushutdown.add(self.vmmenushutdown_items["forcepoweroff"])
  
!         self.vmmenu_items["hsep"] = gtk.SeparatorMenuItem()
!         self.vmmenu_items["hsep"].show();
!         self.vmmenu.add(self.vmmenu_items["hsep"])
  
          self.vmmenu_items["open"] = gtk.ImageMenuItem(gtk.STOCK_OPEN)
          self.vmmenu_items["open"].connect("activate", self.open_vm_console)
--- 200,217 ----
          self.vmmenushutdown_items["forcepoweroff"].connect("activate", self.destroy_vm)
          self.vmmenushutdown.add(self.vmmenushutdown_items["forcepoweroff"])
  
!         self.vmmenu_items["hsep1"] = gtk.SeparatorMenuItem()
!         self.vmmenu_items["hsep1"].show();
!         self.vmmenu.add(self.vmmenu_items["hsep1"])
! 
!         self.vmmenu_items["migrate"] = gtk.ImageMenuItem("_Migrate")
!         self.vmmenu_items["migrate"].connect("activate", self.show_host_list)
!         self.vmmenu_items["migrate"].show()
!         self.vmmenu.add(self.vmmenu_items["migrate"])
! 
!         self.vmmenu_items["hsep2"] = gtk.SeparatorMenuItem()
!         self.vmmenu_items["hsep2"].show();
!         self.vmmenu.add(self.vmmenu_items["hsep2"])
  
          self.vmmenu_items["open"] = gtk.ImageMenuItem(gtk.STOCK_OPEN)
          self.vmmenu_items["open"].connect("activate", self.open_vm_console)
***************
*** 616,621 ****
--- 627,635 ----
          else:
              self.emit("action-show-console", conn.get_uri(), self.current_vmuuid())
  
+     def show_host_list(self,ignore):
+         self.emit("action-show-host-list", self.current_connection().get_uri(), self.current_vmuuid())
+ 
      def show_vm_create(self,ignore):
          self.emit("action-show-create", self.current_connection_uri())
  
***************
*** 700,705 ****
--- 714,720 ----
                      self.vmmenu_items["resume"].hide()
                      self.vmmenu_items["resume"].set_sensitive(False)
                      self.vmmenu_items["shutdown"].set_sensitive(False)
+                     self.vmmenu_items["migrate"].set_sensitive(False)
                  else:
                      if vm.status() == libvirt.VIR_DOMAIN_SHUTOFF:
                          self.vmmenu_items["run"].set_sensitive(True)
***************
*** 708,713 ****
--- 723,729 ----
                          self.vmmenu_items["resume"].hide()
                          self.vmmenu_items["resume"].set_sensitive(False)
                          self.vmmenu_items["shutdown"].set_sensitive(False)
+                         self.vmmenu_items["migrate"].set_sensitive(False)
                      elif vm.status() == libvirt.VIR_DOMAIN_RUNNING:
                          self.vmmenu_items["run"].set_sensitive(False)
                          self.vmmenu_items["pause"].set_sensitive(True)
***************
*** 715,720 ****
--- 731,737 ----
                          self.vmmenu_items["resume"].hide()
                          self.vmmenu_items["resume"].set_sensitive(False)
                          self.vmmenu_items["shutdown"].set_sensitive(True)
+                         self.vmmenu_items["migrate"].set_sensitive(True)
                      elif vm.status() == libvirt.VIR_DOMAIN_PAUSED:
                          self.vmmenu_items["run"].set_sensitive(False)
                          self.vmmenu_items["pause"].hide()
***************
*** 722,727 ****
--- 739,748 ----
                          self.vmmenu_items["resume"].show()
                          self.vmmenu_items["resume"].set_sensitive(True)
                          self.vmmenu_items["shutdown"].set_sensitive(True)
+                         self.vmmenu_items["migrate"].set_sensitive(False)
+                     else:
+                         #VIR_DOMAIN_SHUTDOWN, VIR_DOMAIN_CRASHED
+                         self.vmmenu_items["migrate"].set_sensitive(False)
                  self.vmmenu.popup(None, None, None, 0, event.time)
              return False
          else:
diff -crN /home/upstream/virt-manager/src/vmm-hostlist.glade /home/migrate/virt-manager/src/vmm-hostlist.glade
*** /home/upstream/virt-manager/src/vmm-hostlist.glade	1970-01-01 09:00:00.000000000 +0900
--- /home/migrate/virt-manager/src/vmm-hostlist.glade	2008-09-08 13:34:06.000000000 +0900
***************
*** 0 ****
--- 1,195 ----
+ <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+ <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+ 
+ <glade-interface>
+ 
+ <widget class="GtkWindow" id="vmm-hostlist">
+   <property name="visible">True</property>
+   <property name="title" translatable="yes">The list of the host that migrate domain</property>
+   <property name="type">GTK_WINDOW_TOPLEVEL</property>
+   <property name="window_position">GTK_WIN_POS_NONE</property>
+   <property name="modal">True</property>
+   <property name="default_width">400</property>
+   <property name="default_height">250</property>
+   <property name="resizable">True</property>
+   <property name="destroy_with_parent">False</property>
+   <property name="decorated">True</property>
+   <property name="skip_taskbar_hint">False</property>
+   <property name="skip_pager_hint">False</property>
+   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+   <property name="gravity">GDK_GRAVITY_CENTER</property>
+   <property name="focus_on_map">True</property>
+   <property name="urgency_hint">False</property>
+   <signal name="delete_event" handler="on_hostlist_delete_event" last_modification_time="Tue, 19 Aug 2008 07:48:24 GMT"/>
+ 
+   <child>
+     <widget class="GtkVBox" id="vbox2">
+       <property name="border_width">6</property>
+       <property name="visible">True</property>
+       <property name="homogeneous">False</property>
+       <property name="spacing">6</property>
+ 
+       <child>
+ 	<widget class="GtkLabel" id="hostlist-label">
+ 	  <property name="width_request">380</property>
+ 	  <property name="visible">True</property>
+ 	  <property name="label" translatable="yes">Label</property>
+ 	  <property name="use_underline">False</property>
+ 	  <property name="use_markup">False</property>
+ 	  <property name="justify">GTK_JUSTIFY_LEFT</property>
+ 	  <property name="wrap">True</property>
+ 	  <property name="selectable">False</property>
+ 	  <property name="xalign">0</property>
+ 	  <property name="yalign">0</property>
+ 	  <property name="xpad">0</property>
+ 	  <property name="ypad">0</property>
+ 	  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ 	  <property name="width_chars">-1</property>
+ 	  <property name="single_line_mode">False</property>
+ 	  <property name="angle">0</property>
+ 	</widget>
+ 	<packing>
+ 	  <property name="padding">0</property>
+ 	  <property name="expand">False</property>
+ 	  <property name="fill">False</property>
+ 	</packing>
+       </child>
+ 
+       <child>
+ 	<widget class="GtkScrolledWindow" id="scrolledwindow1">
+ 	  <property name="visible">True</property>
+ 	  <property name="can_focus">True</property>
+ 	  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ 	  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ 	  <property name="shadow_type">GTK_SHADOW_IN</property>
+ 	  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+ 
+ 	  <child>
+ 	    <widget class="GtkTreeView" id="host-list">
+ 	      <property name="visible">True</property>
+ 	      <property name="can_focus">True</property>
+ 	      <property name="headers_visible">True</property>
+ 	      <property name="rules_hint">True</property>
+ 	      <property name="reorderable">False</property>
+ 	      <property name="enable_search">True</property>
+ 	      <property name="fixed_height_mode">False</property>
+ 	      <property name="hover_selection">False</property>
+ 	      <property name="hover_expand">False</property>
+ 	    </widget>
+ 	  </child>
+ 	</widget>
+ 	<packing>
+ 	  <property name="padding">0</property>
+ 	  <property name="expand">True</property>
+ 	  <property name="fill">True</property>
+ 	</packing>
+       </child>
+ 
+       <child>
+ 	<widget class="GtkHButtonBox" id="hostlist-button">
+ 	  <property name="visible">True</property>
+ 	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+ 	  <property name="spacing">3</property>
+ 
+ 	  <child>
+ 	    <widget class="GtkButton" id="hostlist-cancel">
+ 	      <property name="visible">True</property>
+ 	      <property name="sensitive">False</property>
+ 	      <property name="can_default">True</property>
+ 	      <property name="can_focus">True</property>
+ 	      <property name="label">gtk-cancel</property>
+ 	      <property name="use_stock">True</property>
+ 	      <property name="relief">GTK_RELIEF_NORMAL</property>
+ 	      <property name="focus_on_click">True</property>
+ 	      <signal name="clicked" handler="on_hostlist_cancel_clicked" last_modification_time="Tue, 19 Aug 2008 06:10:25 GMT"/>
+ 	    </widget>
+ 	  </child>
+ 
+ 	  <child>
+ 	    <widget class="GtkButton" id="hostlist-migrate">
+ 	      <property name="visible">True</property>
+ 	      <property name="sensitive">False</property>
+ 	      <property name="can_default">True</property>
+ 	      <property name="can_focus">True</property>
+ 	      <property name="relief">GTK_RELIEF_NORMAL</property>
+ 	      <property name="focus_on_click">True</property>
+ 	      <signal name="clicked" handler="on_hostlist_migrate_clicked" last_modification_time="Tue, 19 Aug 2008 06:10:48 GMT"/>
+ 	      <accelerator key="M" modifiers="GDK_MOD1_MASK" signal="clicked"/>
+ 
+ 	      <child>
+ 		<widget class="GtkAlignment" id="alignment2">
+ 		  <property name="visible">True</property>
+ 		  <property name="xalign">0.5</property>
+ 		  <property name="yalign">0.5</property>
+ 		  <property name="xscale">0</property>
+ 		  <property name="yscale">0</property>
+ 		  <property name="top_padding">0</property>
+ 		  <property name="bottom_padding">0</property>
+ 		  <property name="left_padding">0</property>
+ 		  <property name="right_padding">0</property>
+ 
+ 		  <child>
+ 		    <widget class="GtkHBox" id="hbox8">
+ 		      <property name="visible">True</property>
+ 		      <property name="homogeneous">False</property>
+ 		      <property name="spacing">2</property>
+ 
+ 		      <child>
+ 			<widget class="GtkImage" id="image128">
+ 			  <property name="visible">True</property>
+ 			  <property name="stock">gtk-undo</property>
+ 			  <property name="icon_size">4</property>
+ 			  <property name="xalign">0.5</property>
+ 			  <property name="yalign">0.5</property>
+ 			  <property name="xpad">0</property>
+ 			  <property name="ypad">0</property>
+ 			</widget>
+ 			<packing>
+ 			  <property name="padding">0</property>
+ 			  <property name="expand">False</property>
+ 			  <property name="fill">False</property>
+ 			</packing>
+ 		      </child>
+ 
+ 		      <child>
+ 			<widget class="GtkLabel" id="label36">
+ 			  <property name="visible">True</property>
+ 			  <property name="label">Migrate(_M)</property>
+ 			  <property name="use_underline">True</property>
+ 			  <property name="use_markup">False</property>
+ 			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+ 			  <property name="wrap">False</property>
+ 			  <property name="selectable">False</property>
+ 			  <property name="xalign">0.5</property>
+ 			  <property name="yalign">0.5</property>
+ 			  <property name="xpad">0</property>
+ 			  <property name="ypad">0</property>
+ 			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ 			  <property name="width_chars">-1</property>
+ 			  <property name="single_line_mode">False</property>
+ 			  <property name="angle">0</property>
+ 			</widget>
+ 			<packing>
+ 			  <property name="padding">0</property>
+ 			  <property name="expand">False</property>
+ 			  <property name="fill">False</property>
+ 			</packing>
+ 		      </child>
+ 		    </widget>
+ 		  </child>
+ 		</widget>
+ 	      </child>
+ 	    </widget>
+ 	  </child>
+ 	</widget>
+ 	<packing>
+ 	  <property name="padding">0</property>
+ 	  <property name="expand">False</property>
+ 	  <property name="fill">True</property>
+ 	</packing>
+       </child>
+     </widget>
+   </child>
+ </widget>
+ 
+ </glade-interface>
