[virt-tools-list] [PATCH virt-viewer v2] Set a transient parent for GtkDialogs

Pavel Grunt pgrunt at redhat.com
Fri Dec 19 16:15:54 UTC 2014


Silence the Gtk 3.14 message:
"GtkDialog mapped without a transient parent. This is discouraged."
---
v2:
 - the alignment was changed 
---
 src/remote-viewer.c             | 25 +++++++++++++++++--------
 src/virt-viewer-vm-connection.c |  5 ++++-
 src/virt-viewer-vm-connection.h |  4 +++-
 src/virt-viewer.c               | 10 +++++++---
 4 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/src/remote-viewer.c b/src/remote-viewer.c
index 818c421..7d5a254 100644
--- a/src/remote-viewer.c
+++ b/src/remote-viewer.c
@@ -76,7 +76,10 @@ enum {
 };
 
 #ifdef HAVE_OVIRT
-static OvirtVm * choose_vm(char **vm_name, OvirtCollection *vms, GError **error);
+static OvirtVm * choose_vm(GtkWindow *main_window,
+                           char **vm_name,
+                           OvirtCollection *vms,
+                           GError **error);
 #endif
 
 static gboolean remote_viewer_start(VirtViewerApp *self);
@@ -84,7 +87,7 @@ static gboolean remote_viewer_start(VirtViewerApp *self);
 static gboolean remote_viewer_activate(VirtViewerApp *self, GError **error);
 static void remote_viewer_window_added(VirtViewerApp *self, VirtViewerWindow *win);
 static void spice_foreign_menu_updated(RemoteViewer *self);
-static gint connect_dialog(gchar **uri);
+static gint connect_dialog(GtkWindow *main_window, gchar **uri);
 #endif
 
 static void
@@ -836,6 +839,8 @@ create_ovirt_session(VirtViewerApp *app, const char *uri, GError **err)
     gchar *host_subject = NULL;
     gchar *guid = NULL;
 
+    VirtViewerWindow *main_window;
+
     g_return_val_if_fail(VIRT_VIEWER_IS_APP(app), FALSE);
 
     if (!parse_ovirt_uri(uri, &rest_uri, &vm_name, &username)) {
@@ -865,7 +870,8 @@ create_ovirt_session(VirtViewerApp *app, const char *uri, GError **err)
     }
     if (vm_name == NULL ||
         (vm = OVIRT_VM(ovirt_collection_lookup_resource(vms, vm_name))) == NULL) {
-        vm = choose_vm(&vm_name, vms, &error);
+        main_window = virt_viewer_app_get_main_window(app);
+        vm = choose_vm(virt_viewer_window_get_window(main_window), &vm_name, vms, &error);
         if (vm == NULL) {
             goto error;
         }
@@ -1048,7 +1054,7 @@ static void make_label_bold(GtkLabel* label)
 }
 
 static gint
-connect_dialog(gchar **uri)
+connect_dialog(GtkWindow *main_window, gchar **uri)
 {
     GtkWidget *dialog, *area, *box, *label, *entry, *recent;
 #if !GTK_CHECK_VERSION(3, 0, 0)
@@ -1059,7 +1065,7 @@ connect_dialog(gchar **uri)
 
     /* Create the widgets */
     dialog = gtk_dialog_new_with_buttons(_("Connection details"),
-                                         NULL,
+                                         main_window,
                                          GTK_DIALOG_DESTROY_WITH_PARENT,
                                          GTK_STOCK_CANCEL,
                                          GTK_RESPONSE_REJECT,
@@ -1138,7 +1144,7 @@ connect_dialog(gchar **uri)
 
 #ifdef HAVE_OVIRT
 static OvirtVm *
-choose_vm(char **vm_name, OvirtCollection *vms_collection, GError **error)
+choose_vm(GtkWindow *main_window, char **vm_name, OvirtCollection *vms_collection, GError **error)
 {
     GtkListStore *model;
     GtkTreeIter iter;
@@ -1162,7 +1168,8 @@ choose_vm(char **vm_name, OvirtCollection *vms_collection, GError **error)
        }
     }
 
-    *vm_name = virt_viewer_vm_connection_choose_name_dialog(GTK_TREE_MODEL(model), error);
+    *vm_name = virt_viewer_vm_connection_choose_name_dialog(main_window, GTK_TREE_MODEL(model),
+                                                            error);
     g_object_unref(model);
     if (*vm_name == NULL)
         return NULL;
@@ -1180,6 +1187,7 @@ remote_viewer_start(VirtViewerApp *app)
 
     RemoteViewer *self = REMOTE_VIEWER(app);
     RemoteViewerPrivate *priv = self->priv;
+    VirtViewerWindow *main_window;
     GFile *file = NULL;
     VirtViewerFile *vvfile = NULL;
     gboolean ret = FALSE;
@@ -1210,8 +1218,9 @@ remote_viewer_start(VirtViewerApp *app)
     } else {
 #endif
 retry_dialog:
+        main_window = virt_viewer_app_get_main_window(app);
         if (priv->open_recent_dialog) {
-            if (connect_dialog(&guri) != 0)
+            if (connect_dialog(virt_viewer_window_get_window(main_window), &guri) != 0)
                 return FALSE;
             g_object_set(app, "guri", guri, NULL);
         } else
diff --git a/src/virt-viewer-vm-connection.c b/src/virt-viewer-vm-connection.c
index 4a3feba..e15fd4f 100644
--- a/src/virt-viewer-vm-connection.c
+++ b/src/virt-viewer-vm-connection.c
@@ -43,7 +43,9 @@ treeselection_changed_cb(GtkTreeSelection *selection, gpointer userdata)
 }
 
 gchar*
-virt_viewer_vm_connection_choose_name_dialog(GtkTreeModel *model, GError **error)
+virt_viewer_vm_connection_choose_name_dialog(GtkWindow *main_window,
+                                             GtkTreeModel *model,
+                                             GError **error)
 {
     GtkBuilder *vm_connection;
     GtkWidget *dialog;
@@ -67,6 +69,7 @@ virt_viewer_vm_connection_choose_name_dialog(GtkTreeModel *model, GError **error
     g_return_val_if_fail(vm_connection != NULL, NULL);
 
     dialog = GTK_WIDGET(gtk_builder_get_object(vm_connection, "vm-connection-dialog"));
+    gtk_window_set_transient_for(GTK_WINDOW(dialog), main_window);
     button_connect = GTK_BUTTON(gtk_builder_get_object(vm_connection, "button-connect"));
     treeview = GTK_TREE_VIEW(gtk_builder_get_object(vm_connection, "treeview"));
     selection = GTK_TREE_SELECTION(gtk_builder_get_object(vm_connection, "treeview-selection"));
diff --git a/src/virt-viewer-vm-connection.h b/src/virt-viewer-vm-connection.h
index d198c89..8ce0bb2 100644
--- a/src/virt-viewer-vm-connection.h
+++ b/src/virt-viewer-vm-connection.h
@@ -24,7 +24,9 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 
-gchar* virt_viewer_vm_connection_choose_name_dialog(GtkTreeModel *model, GError **error);
+gchar* virt_viewer_vm_connection_choose_name_dialog(GtkWindow *main_window,
+                                                    GtkTreeModel *model,
+                                                    GError **error);
 
 #endif
 /*
diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 193ef3a..13f130a 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -590,7 +590,7 @@ virt_viewer_dispose (GObject *object)
 }
 
 static virDomainPtr
-choose_vm(char **vm_name, virConnectPtr conn, GError **error)
+choose_vm(GtkWindow *main_window, char **vm_name, virConnectPtr conn, GError **error)
 {
     GtkListStore *model;
     GtkTreeIter iter;
@@ -611,7 +611,9 @@ choose_vm(char **vm_name, virConnectPtr conn, GError **error)
     }
     free(domains);
 
-    *vm_name = virt_viewer_vm_connection_choose_name_dialog(GTK_TREE_MODEL(model), error);
+    *vm_name = virt_viewer_vm_connection_choose_name_dialog(main_window,
+                                                            GTK_TREE_MODEL(model),
+                                                            error);
     g_object_unref(G_OBJECT(model));
     if (*vm_name == NULL)
         return NULL;
@@ -643,6 +645,7 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error)
     gboolean ret = FALSE;
     VirtViewer *self = VIRT_VIEWER(app);
     VirtViewerPrivate *priv = self->priv;
+    VirtViewerWindow *main_window;
     char uuid_string[VIR_UUID_STRING_BUFLEN];
     GError *err = NULL;
 
@@ -661,7 +664,8 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error)
             virt_viewer_app_show_status(app, _("Waiting for guest domain to be created"));
             goto wait;
         } else {
-            dom = choose_vm(&priv->domkey, priv->conn, &err);
+            main_window = virt_viewer_app_get_main_window(app);
+            dom = choose_vm(virt_viewer_window_get_window(main_window), &priv->domkey, priv->conn, &err);
             if (dom == NULL && err != NULL) {
                 goto cleanup;
             }
-- 
1.9.3




More information about the virt-tools-list mailing list