+ (* Create the main window. *)
+ let w = new Window.window in
+
+ (* Wire up hooks that carry messages from the slave thread
+ * to the main thread.
+ *)
+ Slave.set_failure_hook w#failure;
+ Slave.set_busy_hook w#throbber_busy;
+ Slave.set_idle_hook w#throbber_idle;
+ Slave.set_status_hook w#set_statusbar;
+ Slave.set_progress_hook w#progress;
+
+ (* Wire up the loosely-coupled external components of the filetree.
+ * See the note about signals in {!Filetree.tree} documentation.
+ *)
+ let tree = w#tree in
+ ignore (tree#op_checksum_file
+ ~callback:(Op_checksum_file.checksum_file tree));
+ ignore (tree#op_copy_regvalue
+ ~callback:(Op_copy_regvalue.copy_regvalue tree));
+ ignore (tree#op_disk_usage
+ ~callback:(Op_disk_usage.disk_usage tree));
+ ignore (tree#op_download_as_reg
+ ~callback:(Op_download_as_reg.download_as_reg tree));
+ ignore (tree#op_download_dir_find0
+ ~callback:(Op_download_dir_find0.download_dir_find0 tree));
+ ignore (tree#op_download_dir_tarball
+ ~callback:(Op_download_dir_tarball.download_dir_tarball tree));
+ ignore (tree#op_download_file
+ ~callback:(Op_download_file.download_file tree));
+ ignore (tree#op_file_information
+ ~callback:(Op_file_information.file_information tree));
+ ignore (tree#op_inspection_dialog
+ ~callback:(Op_inspection_dialog.inspection_dialog tree));
+ ignore (tree#op_view_file
+ ~callback:(Op_view_file.view_file tree));
+
+ (* Connect menu entry signals to the functions that implement them. *)
+ ignore (w#connect_kvm_signal
+ ~callback:(w#connect_to (Some "qemu:///system")));
+ ignore (w#connect_xen_signal
+ ~callback:(w#connect_to (Some "xen:///")));
+ ignore (w#connect_none_signal
+ ~callback:(w#connect_to None));