|
|
140d58 |
From 00f9ae545ec7b885c666b6066d40f4c336b4643d Mon Sep 17 00:00:00 2001
|
|
|
140d58 |
From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com>
|
|
|
140d58 |
Date: Tue, 19 Jul 2016 14:31:45 -0300
|
|
|
140d58 |
Subject: [PATCH 10/26] Run ISO dialog when 'Change CD' menu is activated
|
|
|
140d58 |
|
|
|
140d58 |
Also moves 'Change CD' menu item from the toplevel menu to a subitem
|
|
|
140d58 |
under 'File' toplevel menu.
|
|
|
140d58 |
|
|
|
140d58 |
In order to avoid object interdependency, it is necessary to make the
|
|
|
140d58 |
ovirt foreign-menu pointer from RemoteViewer, accessible via property,
|
|
|
140d58 |
so it can be passed to the dialog as an opaque GObject.
|
|
|
140d58 |
|
|
|
140d58 |
Finally, with this commit, we clean up ovirt foreign menu code, which
|
|
|
140d58 |
only deals with data, leaving the UI bits to be handled properly in the
|
|
|
140d58 |
new ISO list dialog.
|
|
|
140d58 |
|
|
|
140d58 |
Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
|
|
|
140d58 |
---
|
|
|
140d58 |
src/ovirt-foreign-menu.c | 99 --------------------------------
|
|
|
140d58 |
src/remote-viewer.c | 124 ++++++++++++++--------------------------
|
|
|
140d58 |
src/resources/ui/virt-viewer.ui | 19 +++---
|
|
|
140d58 |
src/virt-viewer-window.c | 37 ++++++++++++
|
|
|
140d58 |
4 files changed, 90 insertions(+), 189 deletions(-)
|
|
|
140d58 |
|
|
|
140d58 |
diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c
|
|
|
140d58 |
index ef3ddd9..2939ae5 100644
|
|
|
140d58 |
--- a/src/ovirt-foreign-menu.c
|
|
|
140d58 |
+++ b/src/ovirt-foreign-menu.c
|
|
|
140d58 |
@@ -350,22 +350,6 @@ ovirt_foreign_menu_fetch_iso_names_finish(OvirtForeignMenu *foreign_menu,
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
|
|
|
140d58 |
-static void
|
|
|
140d58 |
-ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data);
|
|
|
140d58 |
-
|
|
|
140d58 |
-
|
|
|
140d58 |
-static void
|
|
|
140d58 |
-menu_item_set_active_no_signal(GtkMenuItem *menuitem,
|
|
|
140d58 |
- gboolean active,
|
|
|
140d58 |
- GCallback callback,
|
|
|
140d58 |
- gpointer user_data)
|
|
|
140d58 |
-{
|
|
|
140d58 |
- g_signal_handlers_block_by_func(menuitem, callback, user_data);
|
|
|
140d58 |
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active);
|
|
|
140d58 |
- g_signal_handlers_unblock_by_func(menuitem, callback, user_data);
|
|
|
140d58 |
-}
|
|
|
140d58 |
-
|
|
|
140d58 |
-
|
|
|
140d58 |
static void iso_name_set_cb(GObject *source_object,
|
|
|
140d58 |
GAsyncResult *result,
|
|
|
140d58 |
gpointer user_data)
|
|
|
140d58 |
@@ -447,88 +431,6 @@ gboolean ovirt_foreign_menu_set_current_iso_name_finish(OvirtForeignMenu *foreig
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
|
|
|
140d58 |
-static void
|
|
|
140d58 |
-ovirt_foreign_menu_iso_name_changed(GObject *source_object,
|
|
|
140d58 |
- GAsyncResult *result,
|
|
|
140d58 |
- gpointer user_data G_GNUC_UNUSED)
|
|
|
140d58 |
-{
|
|
|
140d58 |
- OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(source_object);
|
|
|
140d58 |
- GError *error = NULL;
|
|
|
140d58 |
-
|
|
|
140d58 |
- if (!ovirt_foreign_menu_set_current_iso_name_finish(foreign_menu, result, &error)) {
|
|
|
140d58 |
- g_warning(error ? error->message : "Failed to change CD");
|
|
|
140d58 |
- g_clear_error(&error);
|
|
|
140d58 |
- return;
|
|
|
140d58 |
- }
|
|
|
140d58 |
-
|
|
|
140d58 |
- g_object_notify(G_OBJECT(foreign_menu), "file");
|
|
|
140d58 |
-}
|
|
|
140d58 |
-
|
|
|
140d58 |
-
|
|
|
140d58 |
-static void
|
|
|
140d58 |
-ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data)
|
|
|
140d58 |
-{
|
|
|
140d58 |
- OvirtForeignMenu *foreign_menu;
|
|
|
140d58 |
- const char *iso_name = NULL;
|
|
|
140d58 |
- gboolean checked;
|
|
|
140d58 |
-
|
|
|
140d58 |
- checked = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem));
|
|
|
140d58 |
- foreign_menu = OVIRT_FOREIGN_MENU(user_data);
|
|
|
140d58 |
- g_return_if_fail(foreign_menu->priv->cdrom != NULL);
|
|
|
140d58 |
- g_return_if_fail(foreign_menu->priv->next_iso_name == NULL);
|
|
|
140d58 |
-
|
|
|
140d58 |
- g_debug("'%s' clicked", gtk_menu_item_get_label(menuitem));
|
|
|
140d58 |
-
|
|
|
140d58 |
- /* We only want to move the check mark for the currently selected ISO
|
|
|
140d58 |
- * when ovirt_cdrom_update_async() is successful, so for now we move
|
|
|
140d58 |
- * the check mark back to where it was before
|
|
|
140d58 |
- */
|
|
|
140d58 |
- menu_item_set_active_no_signal(menuitem, !checked,
|
|
|
140d58 |
- (GCallback)ovirt_foreign_menu_activate_item_cb,
|
|
|
140d58 |
- foreign_menu);
|
|
|
140d58 |
-
|
|
|
140d58 |
- if (checked) {
|
|
|
140d58 |
- iso_name = gtk_menu_item_get_label(menuitem);
|
|
|
140d58 |
- }
|
|
|
140d58 |
- ovirt_foreign_menu_set_current_iso_name_async(foreign_menu, iso_name, NULL,
|
|
|
140d58 |
- ovirt_foreign_menu_iso_name_changed,
|
|
|
140d58 |
- menuitem);
|
|
|
140d58 |
-}
|
|
|
140d58 |
-
|
|
|
140d58 |
-
|
|
|
140d58 |
-GtkWidget *ovirt_foreign_menu_get_gtk_menu(OvirtForeignMenu *foreign_menu)
|
|
|
140d58 |
-{
|
|
|
140d58 |
- GtkWidget *gtk_menu;
|
|
|
140d58 |
- GList *it;
|
|
|
140d58 |
- char *current_iso;
|
|
|
140d58 |
-
|
|
|
140d58 |
- if (foreign_menu->priv->iso_names == NULL) {
|
|
|
140d58 |
- g_debug("ISO list is empty, no menu to show");
|
|
|
140d58 |
- return NULL;
|
|
|
140d58 |
- }
|
|
|
140d58 |
- g_debug("Creating GtkMenu for foreign menu");
|
|
|
140d58 |
- current_iso = ovirt_foreign_menu_get_current_iso_name(foreign_menu);
|
|
|
140d58 |
- gtk_menu = gtk_menu_new();
|
|
|
140d58 |
- for (it = foreign_menu->priv->iso_names; it != NULL; it = it->next) {
|
|
|
140d58 |
- GtkWidget *menuitem;
|
|
|
140d58 |
-
|
|
|
140d58 |
- menuitem = gtk_check_menu_item_new_with_label((char *)it->data);
|
|
|
140d58 |
- if (g_strcmp0((char *)it->data, current_iso) == 0) {
|
|
|
140d58 |
- g_warn_if_fail(g_strcmp0(current_iso, foreign_menu->priv->current_iso_name) == 0);
|
|
|
140d58 |
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
|
|
|
140d58 |
- TRUE);
|
|
|
140d58 |
- }
|
|
|
140d58 |
- g_signal_connect(menuitem, "activate",
|
|
|
140d58 |
- G_CALLBACK(ovirt_foreign_menu_activate_item_cb),
|
|
|
140d58 |
- foreign_menu);
|
|
|
140d58 |
- gtk_menu_shell_append(GTK_MENU_SHELL(gtk_menu), menuitem);
|
|
|
140d58 |
- }
|
|
|
140d58 |
- g_free(current_iso);
|
|
|
140d58 |
-
|
|
|
140d58 |
- return gtk_menu;
|
|
|
140d58 |
-}
|
|
|
140d58 |
-
|
|
|
140d58 |
-
|
|
|
140d58 |
static void ovirt_foreign_menu_set_files(OvirtForeignMenu *menu,
|
|
|
140d58 |
const GList *files)
|
|
|
140d58 |
{
|
|
|
140d58 |
@@ -594,7 +496,6 @@ static void cdrom_file_refreshed_cb(GObject *source_object,
|
|
|
140d58 |
"file", &menu->priv->current_iso_name,
|
|
|
140d58 |
NULL);
|
|
|
140d58 |
}
|
|
|
140d58 |
- g_object_notify(G_OBJECT(menu), "file");
|
|
|
140d58 |
if (menu->priv->cdrom != NULL) {
|
|
|
140d58 |
ovirt_foreign_menu_next_async_step(menu, task, STATE_CDROM_FILE);
|
|
|
140d58 |
} else {
|
|
|
140d58 |
diff --git a/src/remote-viewer.c b/src/remote-viewer.c
|
|
|
140d58 |
index c84a35b..d04dbb5 100644
|
|
|
140d58 |
--- a/src/remote-viewer.c
|
|
|
140d58 |
+++ b/src/remote-viewer.c
|
|
|
140d58 |
@@ -67,12 +67,18 @@ G_DEFINE_TYPE (RemoteViewer, remote_viewer, VIRT_VIEWER_TYPE_APP)
|
|
|
140d58 |
#define GET_PRIVATE(o) \
|
|
|
140d58 |
(G_TYPE_INSTANCE_GET_PRIVATE ((o), REMOTE_VIEWER_TYPE, RemoteViewerPrivate))
|
|
|
140d58 |
|
|
|
140d58 |
+enum RemoteViewerProperties {
|
|
|
140d58 |
+ PROP_0,
|
|
|
140d58 |
+#ifdef HAVE_OVIRT
|
|
|
140d58 |
+ PROP_OVIRT_FOREIGN_MENU,
|
|
|
140d58 |
+#endif
|
|
|
140d58 |
+};
|
|
|
140d58 |
+
|
|
|
140d58 |
#ifdef HAVE_OVIRT
|
|
|
140d58 |
static OvirtVm * choose_vm(GtkWindow *main_window,
|
|
|
140d58 |
char **vm_name,
|
|
|
140d58 |
OvirtCollection *vms,
|
|
|
140d58 |
GError **error);
|
|
|
140d58 |
-static gboolean remote_viewer_refresh_ovirt_foreign_menu(gpointer user_data);
|
|
|
140d58 |
#endif
|
|
|
140d58 |
|
|
|
140d58 |
static gboolean remote_viewer_start(VirtViewerApp *self, GError **error);
|
|
|
140d58 |
@@ -214,6 +220,25 @@ end:
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
static void
|
|
|
140d58 |
+remote_viewer_get_property(GObject *object, guint property_id,
|
|
|
140d58 |
+ GValue *value, GParamSpec *pspec)
|
|
|
140d58 |
+{
|
|
|
140d58 |
+ RemoteViewer *self = REMOTE_VIEWER(object);
|
|
|
140d58 |
+ RemoteViewerPrivate *priv = self->priv;
|
|
|
140d58 |
+
|
|
|
140d58 |
+ switch (property_id) {
|
|
|
140d58 |
+#ifdef HAVE_OVIRT
|
|
|
140d58 |
+ case PROP_OVIRT_FOREIGN_MENU:
|
|
|
140d58 |
+ g_value_set_object(value, priv->ovirt_foreign_menu);
|
|
|
140d58 |
+ break;
|
|
|
140d58 |
+#endif
|
|
|
140d58 |
+
|
|
|
140d58 |
+ default:
|
|
|
140d58 |
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
|
140d58 |
+ }
|
|
|
140d58 |
+}
|
|
|
140d58 |
+
|
|
|
140d58 |
+static void
|
|
|
140d58 |
remote_viewer_class_init (RemoteViewerClass *klass)
|
|
|
140d58 |
{
|
|
|
140d58 |
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
140d58 |
@@ -223,6 +248,7 @@ remote_viewer_class_init (RemoteViewerClass *klass)
|
|
|
140d58 |
|
|
|
140d58 |
g_type_class_add_private (klass, sizeof (RemoteViewerPrivate));
|
|
|
140d58 |
|
|
|
140d58 |
+ object_class->get_property = remote_viewer_get_property;
|
|
|
140d58 |
object_class->dispose = remote_viewer_dispose;
|
|
|
140d58 |
|
|
|
140d58 |
g_app_class->local_command_line = remote_viewer_local_command_line;
|
|
|
140d58 |
@@ -236,6 +262,16 @@ remote_viewer_class_init (RemoteViewerClass *klass)
|
|
|
140d58 |
#else
|
|
|
140d58 |
(void) gtk_app_class;
|
|
|
140d58 |
#endif
|
|
|
140d58 |
+
|
|
|
140d58 |
+#ifdef HAVE_OVIRT
|
|
|
140d58 |
+ g_object_class_install_property(object_class,
|
|
|
140d58 |
+ PROP_OVIRT_FOREIGN_MENU,
|
|
|
140d58 |
+ g_param_spec_object("ovirt-foreign-menu",
|
|
|
140d58 |
+ "oVirt Foreign Menu",
|
|
|
140d58 |
+ "Object which is used as interface to oVirt",
|
|
|
140d58 |
+ OVIRT_TYPE_FOREIGN_MENU,
|
|
|
140d58 |
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
|
|
140d58 |
+#endif
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
static void
|
|
|
140d58 |
@@ -735,33 +771,11 @@ authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED RestProxyAuth *auth,
|
|
|
140d58 |
static void
|
|
|
140d58 |
ovirt_foreign_menu_update(GtkApplication *gtkapp, GtkWindow *gtkwin, G_GNUC_UNUSED gpointer data)
|
|
|
140d58 |
{
|
|
|
140d58 |
- RemoteViewer *app = REMOTE_VIEWER(gtkapp);
|
|
|
140d58 |
+ RemoteViewer *self = REMOTE_VIEWER(gtkapp);
|
|
|
140d58 |
VirtViewerWindow *win = g_object_get_data(G_OBJECT(gtkwin), "virt-viewer-window");
|
|
|
140d58 |
- GtkWidget *menu = g_object_get_data(G_OBJECT(win), "foreign-menu");
|
|
|
140d58 |
- GtkWidget *submenu;
|
|
|
140d58 |
-
|
|
|
140d58 |
- if (app->priv->ovirt_foreign_menu == NULL) {
|
|
|
140d58 |
- /* nothing to do */
|
|
|
140d58 |
- return;
|
|
|
140d58 |
- }
|
|
|
140d58 |
-
|
|
|
140d58 |
- submenu = ovirt_foreign_menu_get_gtk_menu(app->priv->ovirt_foreign_menu);
|
|
|
140d58 |
- if (submenu == NULL) {
|
|
|
140d58 |
- /* No items to show, no point in showing the menu */
|
|
|
140d58 |
- if (menu != NULL)
|
|
|
140d58 |
- gtk_widget_set_visible(menu, FALSE);
|
|
|
140d58 |
- g_object_set_data(G_OBJECT(win), "foreign-menu", NULL);
|
|
|
140d58 |
- return;
|
|
|
140d58 |
- }
|
|
|
140d58 |
-
|
|
|
140d58 |
- if (menu == NULL) {
|
|
|
140d58 |
- menu = GTK_WIDGET(gtk_builder_get_object(virt_viewer_window_get_builder(win), "menu-change-cd"));
|
|
|
140d58 |
- g_object_set_data(G_OBJECT(win), "foreign-menu", menu);
|
|
|
140d58 |
- gtk_widget_set_visible(menu, TRUE);
|
|
|
140d58 |
- }
|
|
|
140d58 |
-
|
|
|
140d58 |
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu);
|
|
|
140d58 |
- gtk_widget_show_all(menu);
|
|
|
140d58 |
+ GtkBuilder *builder = virt_viewer_window_get_builder(win);
|
|
|
140d58 |
+ GtkWidget *menu = GTK_WIDGET(gtk_builder_get_object(builder, "menu-change-cd"));
|
|
|
140d58 |
+ gtk_widget_set_visible(menu, self->priv->ovirt_foreign_menu != NULL);
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
static void
|
|
|
140d58 |
@@ -784,52 +798,6 @@ ovirt_foreign_menu_updated(RemoteViewer *self)
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
static void
|
|
|
140d58 |
-ovirt_foreign_menu_fetch_iso_names_cb(GObject *source_object,
|
|
|
140d58 |
- GAsyncResult *result,
|
|
|
140d58 |
- gpointer user_data)
|
|
|
140d58 |
-{
|
|
|
140d58 |
- OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(source_object);
|
|
|
140d58 |
- RemoteViewer *self = REMOTE_VIEWER(user_data);
|
|
|
140d58 |
- VirtViewerApp *app = VIRT_VIEWER_APP(user_data);
|
|
|
140d58 |
- GError *error = NULL;
|
|
|
140d58 |
- GList *iso_list;
|
|
|
140d58 |
-
|
|
|
140d58 |
- iso_list = ovirt_foreign_menu_fetch_iso_names_finish(foreign_menu, result, &error);
|
|
|
140d58 |
-
|
|
|
140d58 |
- if (!iso_list) {
|
|
|
140d58 |
- virt_viewer_app_simple_message_dialog(app, error ? error->message : _("Failed to fetch CD names"));
|
|
|
140d58 |
- g_clear_error(&error);
|
|
|
140d58 |
- return;
|
|
|
140d58 |
- }
|
|
|
140d58 |
-
|
|
|
140d58 |
- ovirt_foreign_menu_updated(self);
|
|
|
140d58 |
- g_timeout_add_seconds(300, remote_viewer_refresh_ovirt_foreign_menu, self);
|
|
|
140d58 |
-}
|
|
|
140d58 |
-
|
|
|
140d58 |
-static gboolean
|
|
|
140d58 |
-remote_viewer_refresh_ovirt_foreign_menu(gpointer user_data)
|
|
|
140d58 |
-{
|
|
|
140d58 |
- VirtViewerApp *app = VIRT_VIEWER_APP(user_data);
|
|
|
140d58 |
- RemoteViewer *self = REMOTE_VIEWER(user_data);
|
|
|
140d58 |
-
|
|
|
140d58 |
- g_debug("Refreshing foreign menu iso list");
|
|
|
140d58 |
- ovirt_foreign_menu_fetch_iso_names_async(self->priv->ovirt_foreign_menu,
|
|
|
140d58 |
- NULL,
|
|
|
140d58 |
- ovirt_foreign_menu_fetch_iso_names_cb,
|
|
|
140d58 |
- app);
|
|
|
140d58 |
- return G_SOURCE_REMOVE;
|
|
|
140d58 |
-}
|
|
|
140d58 |
-
|
|
|
140d58 |
-static void
|
|
|
140d58 |
-ovirt_foreign_menu_changed(OvirtForeignMenu *foreign_menu G_GNUC_UNUSED,
|
|
|
140d58 |
- GParamSpec *pspec G_GNUC_UNUSED,
|
|
|
140d58 |
- VirtViewerApp *app)
|
|
|
140d58 |
-{
|
|
|
140d58 |
- ovirt_foreign_menu_updated(REMOTE_VIEWER(app));
|
|
|
140d58 |
-}
|
|
|
140d58 |
-
|
|
|
140d58 |
-
|
|
|
140d58 |
-static void
|
|
|
140d58 |
virt_viewer_app_set_ovirt_foreign_menu(VirtViewerApp *app,
|
|
|
140d58 |
OvirtForeignMenu *foreign_menu)
|
|
|
140d58 |
{
|
|
|
140d58 |
@@ -838,17 +806,11 @@ virt_viewer_app_set_ovirt_foreign_menu(VirtViewerApp *app,
|
|
|
140d58 |
g_return_if_fail(OVIRT_IS_FOREIGN_MENU(foreign_menu));
|
|
|
140d58 |
|
|
|
140d58 |
self = REMOTE_VIEWER(app);
|
|
|
140d58 |
- if (self->priv->ovirt_foreign_menu != NULL) {
|
|
|
140d58 |
- g_object_unref(G_OBJECT(self->priv->ovirt_foreign_menu));
|
|
|
140d58 |
- }
|
|
|
140d58 |
+ g_clear_object(&self->priv->ovirt_foreign_menu);
|
|
|
140d58 |
self->priv->ovirt_foreign_menu = foreign_menu;
|
|
|
140d58 |
- g_signal_connect(G_OBJECT(foreign_menu), "notify::file",
|
|
|
140d58 |
- (GCallback)ovirt_foreign_menu_changed, app);
|
|
|
140d58 |
-
|
|
|
140d58 |
g_signal_connect(G_OBJECT(app), "window-added",
|
|
|
140d58 |
(GCallback)ovirt_foreign_menu_update, NULL);
|
|
|
140d58 |
-
|
|
|
140d58 |
- remote_viewer_refresh_ovirt_foreign_menu(self);
|
|
|
140d58 |
+ ovirt_foreign_menu_updated(self);
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
static gboolean
|
|
|
140d58 |
diff --git a/src/resources/ui/virt-viewer.ui b/src/resources/ui/virt-viewer.ui
|
|
|
140d58 |
index 6e3c5ad..e9609ec 100644
|
|
|
140d58 |
--- a/src/resources/ui/virt-viewer.ui
|
|
|
140d58 |
+++ b/src/resources/ui/virt-viewer.ui
|
|
|
140d58 |
@@ -1,6 +1,7 @@
|
|
|
140d58 |
|
|
|
140d58 |
+
|
|
|
140d58 |
<interface>
|
|
|
140d58 |
-
|
|
|
140d58 |
+ <requires lib="gtk+" version="3.0"/>
|
|
|
140d58 |
<object class="GtkAccelGroup" id="accelgroup"/>
|
|
|
140d58 |
<object class="GtkApplicationWindow" id="viewer">
|
|
|
140d58 |
<property name="can_focus">False</property>
|
|
|
140d58 |
@@ -73,6 +74,14 @@
|
|
|
140d58 |
</object>
|
|
|
140d58 |
</child>
|
|
|
140d58 |
<child>
|
|
|
140d58 |
+ <object class="GtkMenuItem" id="menu-change-cd">
|
|
|
140d58 |
+ <property name="can_focus">False</property>
|
|
|
140d58 |
+ <property name="label" translatable="yes">_Change CD</property>
|
|
|
140d58 |
+ <property name="use_underline">True</property>
|
|
|
140d58 |
+ <signal name="activate" handler="virt_viewer_window_menu_change_cd_activate" swapped="no"/>
|
|
|
140d58 |
+ </object>
|
|
|
140d58 |
+ </child>
|
|
|
140d58 |
+ <child>
|
|
|
140d58 |
<object class="GtkMenuItem" id="menu-preferences">
|
|
|
140d58 |
<property name="visible">True</property>
|
|
|
140d58 |
<property name="can_focus">False</property>
|
|
|
140d58 |
@@ -247,14 +256,6 @@
|
|
|
140d58 |
</child>
|
|
|
140d58 |
</object>
|
|
|
140d58 |
</child>
|
|
|
140d58 |
- <child>
|
|
|
140d58 |
- <object class="GtkMenuItem" id="menu-change-cd">
|
|
|
140d58 |
- <property name="use_action_appearance">False</property>
|
|
|
140d58 |
- <property name="can_focus">False</property>
|
|
|
140d58 |
- <property name="label" translatable="yes">_Change CD</property>
|
|
|
140d58 |
- <property name="use_underline">True</property>
|
|
|
140d58 |
- </object>
|
|
|
140d58 |
- </child>
|
|
|
140d58 |
</object>
|
|
|
140d58 |
<packing>
|
|
|
140d58 |
<property name="expand">False</property>
|
|
|
140d58 |
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
|
|
|
140d58 |
index 99fd102..8eda12e 100644
|
|
|
140d58 |
--- a/src/virt-viewer-window.c
|
|
|
140d58 |
+++ b/src/virt-viewer-window.c
|
|
|
140d58 |
@@ -43,6 +43,8 @@
|
|
|
140d58 |
#include "virt-viewer-util.h"
|
|
|
140d58 |
#include "virt-viewer-timed-revealer.h"
|
|
|
140d58 |
|
|
|
140d58 |
+#include "remote-viewer-iso-list-dialog.h"
|
|
|
140d58 |
+
|
|
|
140d58 |
#define ZOOM_STEP 10
|
|
|
140d58 |
|
|
|
140d58 |
/* Signal handlers for main window (move in a VirtViewerMainWindow?) */
|
|
|
140d58 |
@@ -62,6 +64,7 @@ void virt_viewer_window_menu_file_smartcard_insert(GtkWidget *menu, VirtViewerWi
|
|
|
140d58 |
void virt_viewer_window_menu_file_smartcard_remove(GtkWidget *menu, VirtViewerWindow *self);
|
|
|
140d58 |
void virt_viewer_window_menu_view_release_cursor(GtkWidget *menu, VirtViewerWindow *self);
|
|
|
140d58 |
void virt_viewer_window_menu_preferences_cb(GtkWidget *menu, VirtViewerWindow *self);
|
|
|
140d58 |
+void virt_viewer_window_menu_change_cd_activate(GtkWidget *menu, VirtViewerWindow *self);
|
|
|
140d58 |
|
|
|
140d58 |
|
|
|
140d58 |
/* Internal methods */
|
|
|
140d58 |
@@ -1056,6 +1059,40 @@ virt_viewer_window_menu_help_about(GtkWidget *menu G_GNUC_UNUSED,
|
|
|
140d58 |
g_object_unref(G_OBJECT(about));
|
|
|
140d58 |
}
|
|
|
140d58 |
|
|
|
140d58 |
+static void
|
|
|
140d58 |
+iso_dialog_response(GtkDialog *dialog,
|
|
|
140d58 |
+ gint response_id,
|
|
|
140d58 |
+ gpointer user_data G_GNUC_UNUSED)
|
|
|
140d58 |
+{
|
|
|
140d58 |
+ if (response_id == GTK_RESPONSE_NONE)
|
|
|
140d58 |
+ return;
|
|
|
140d58 |
+
|
|
|
140d58 |
+ gtk_widget_destroy(GTK_WIDGET(dialog));
|
|
|
140d58 |
+}
|
|
|
140d58 |
+
|
|
|
140d58 |
+void
|
|
|
140d58 |
+virt_viewer_window_menu_change_cd_activate(GtkWidget *menu G_GNUC_UNUSED,
|
|
|
140d58 |
+ VirtViewerWindow *self)
|
|
|
140d58 |
+{
|
|
|
140d58 |
+ VirtViewerWindowPrivate *priv = self->priv;
|
|
|
140d58 |
+ GtkWidget *dialog;
|
|
|
140d58 |
+ GObject *foreign_menu;
|
|
|
140d58 |
+
|
|
|
140d58 |
+ g_object_get(G_OBJECT(priv->app), "ovirt-foreign-menu", &foreign_menu, NULL);
|
|
|
140d58 |
+ dialog = remote_viewer_iso_list_dialog_new(GTK_WINDOW(priv->window), foreign_menu);
|
|
|
140d58 |
+ g_object_unref(foreign_menu);
|
|
|
140d58 |
+
|
|
|
140d58 |
+ if (!dialog)
|
|
|
140d58 |
+ dialog = gtk_message_dialog_new(GTK_WINDOW(priv->window),
|
|
|
140d58 |
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
|
140d58 |
+ GTK_MESSAGE_ERROR,
|
|
|
140d58 |
+ GTK_BUTTONS_CLOSE,
|
|
|
140d58 |
+ _("Unable to connnect to oVirt"));
|
|
|
140d58 |
+
|
|
|
140d58 |
+ g_signal_connect(dialog, "response", G_CALLBACK(iso_dialog_response), NULL);
|
|
|
140d58 |
+ gtk_widget_show_all(dialog);
|
|
|
140d58 |
+ gtk_dialog_run(GTK_DIALOG(dialog));
|
|
|
140d58 |
+}
|
|
|
140d58 |
|
|
|
140d58 |
static void
|
|
|
140d58 |
virt_viewer_window_toolbar_setup(VirtViewerWindow *self)
|
|
|
140d58 |
--
|
|
|
140d58 |
2.12.0
|
|
|
140d58 |
|