[virt-tools-list] [PATCH virt-viewer v2 10/12] remote-viewer: Make ovirt-foreign-menu a property
Eduardo Lima (Etrunko)
etrunko at redhat.com
Fri Jul 22 13:19:01 UTC 2016
The OvirtForeignMenu pointer is needed by the new ISO list dialog, and
we make it acessible via property to avoid interdependency between
objects.
Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
---
src/remote-viewer-iso-list-dialog.c | 31 +++++++++++++++++++++++--------
src/remote-viewer-iso-list-dialog.h | 2 +-
src/remote-viewer.c | 37 +++++++++++++++++++++++++++++++++++++
src/virt-viewer-window.c | 17 +++++++++++++++--
4 files changed, 76 insertions(+), 11 deletions(-)
diff --git a/src/remote-viewer-iso-list-dialog.c b/src/remote-viewer-iso-list-dialog.c
index a319adb..7a84d0c 100644
--- a/src/remote-viewer-iso-list-dialog.c
+++ b/src/remote-viewer-iso-list-dialog.c
@@ -24,6 +24,7 @@
#include "remote-viewer-iso-list-dialog.h"
#include "virt-viewer-util.h"
+#include "ovirt-foreign-menu.h"
G_DEFINE_TYPE(RemoteViewerISOListDialog, remote_viewer_iso_list_dialog, GTK_TYPE_DIALOG)
@@ -33,6 +34,7 @@ G_DEFINE_TYPE(RemoteViewerISOListDialog, remote_viewer_iso_list_dialog, GTK_TYPE
struct _RemoteViewerISOListDialogPrivate
{
GtkWidget *stack;
+ OvirtForeignMenu *foreign_menu;
};
enum RemoteViewerIsoListDialogPages
@@ -44,6 +46,10 @@ enum RemoteViewerIsoListDialogPages
static void
remote_viewer_iso_list_dialog_dispose(GObject *object)
{
+ RemoteViewerISOListDialog *self = REMOTE_VIEWER_ISO_LIST_DIALOG(object);
+ RemoteViewerISOListDialogPrivate *priv = self->priv;
+
+ g_clear_object(&priv->foreign_menu);
G_OBJECT_CLASS(remote_viewer_iso_list_dialog_parent_class)->dispose(object);
}
@@ -100,13 +106,22 @@ remote_viewer_iso_list_dialog_init(RemoteViewerISOListDialog *self)
}
GtkWidget *
-remote_viewer_iso_list_dialog_new(GtkWindow *parent)
+remote_viewer_iso_list_dialog_new(GtkWindow *parent, GObject *foreign_menu)
{
- return g_object_new(REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG,
- "title", _("Change CD"),
- "transient-for", parent,
- "border-width", 18,
- "default-width", 400,
- "default-height", 300,
- NULL);
+ GtkWidget *dialog;
+ RemoteViewerISOListDialog *self;
+
+ g_return_val_if_fail(foreign_menu != NULL, NULL);
+
+ dialog = g_object_new(REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG,
+ "title", _("Change CD"),
+ "transient-for", parent,
+ "border-width", 18,
+ "default-width", 400,
+ "default-height", 300,
+ NULL);
+
+ self = REMOTE_VIEWER_ISO_LIST_DIALOG(dialog);
+ self->priv->foreign_menu = OVIRT_FOREIGN_MENU(g_object_ref(foreign_menu));
+ return dialog;
}
diff --git a/src/remote-viewer-iso-list-dialog.h b/src/remote-viewer-iso-list-dialog.h
index def841b..8b936f5 100644
--- a/src/remote-viewer-iso-list-dialog.h
+++ b/src/remote-viewer-iso-list-dialog.h
@@ -51,7 +51,7 @@ struct _RemoteViewerISOListDialogClass
GType remote_viewer_iso_list_dialog_get_type(void) G_GNUC_CONST;
-GtkWidget *remote_viewer_iso_list_dialog_new(GtkWindow *parent);
+GtkWidget *remote_viewer_iso_list_dialog_new(GtkWindow *parent, GObject *foreign_menu);
G_END_DECLS
diff --git a/src/remote-viewer.c b/src/remote-viewer.c
index 95130dc..e0cd139 100644
--- a/src/remote-viewer.c
+++ b/src/remote-viewer.c
@@ -67,6 +67,13 @@ G_DEFINE_TYPE (RemoteViewer, remote_viewer, VIRT_VIEWER_TYPE_APP)
#define GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), REMOTE_VIEWER_TYPE, RemoteViewerPrivate))
+enum RemoteViewerProperties {
+ PROP_0,
+#ifdef HAVE_OVIRT
+ PROP_OVIRT_FOREIGN_MENU,
+#endif
+};
+
#ifdef HAVE_OVIRT
static OvirtVm * choose_vm(GtkWindow *main_window,
char **vm_name,
@@ -213,6 +220,25 @@ end:
}
static void
+remote_viewer_get_property(GObject *object, guint property_id,
+ GValue *value, GParamSpec *pspec)
+{
+ RemoteViewer *self = REMOTE_VIEWER(object);
+ RemoteViewerPrivate *priv = self->priv;
+
+ switch (property_id) {
+#ifdef HAVE_OVIRT
+ case PROP_OVIRT_FOREIGN_MENU:
+ g_value_set_object(value, priv->ovirt_foreign_menu);
+ break;
+#endif
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
remote_viewer_class_init (RemoteViewerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -222,6 +248,7 @@ remote_viewer_class_init (RemoteViewerClass *klass)
g_type_class_add_private (klass, sizeof (RemoteViewerPrivate));
+ object_class->get_property = remote_viewer_get_property;
object_class->dispose = remote_viewer_dispose;
g_app_class->local_command_line = remote_viewer_local_command_line;
@@ -235,6 +262,16 @@ remote_viewer_class_init (RemoteViewerClass *klass)
#else
(void) gtk_app_class;
#endif
+
+#ifdef HAVE_OVIRT
+ g_object_class_install_property(object_class,
+ PROP_OVIRT_FOREIGN_MENU,
+ g_param_spec_object("ovirt-foreign-menu",
+ "oVirt Foreign Menu",
+ "Object which is used as interface to oVirt",
+ OVIRT_TYPE_FOREIGN_MENU,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+#endif
}
static void
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
index b82035e..dfec7dc 100644
--- a/src/virt-viewer-window.c
+++ b/src/virt-viewer-window.c
@@ -1071,8 +1071,21 @@ virt_viewer_window_menu_change_cd_activate(GtkWidget *menu G_GNUC_UNUSED,
VirtViewerWindow *self)
{
VirtViewerWindowPrivate *priv = self->priv;
- GtkWidget *dialog = remote_viewer_iso_list_dialog_new(GTK_WINDOW(priv->window));
- g_signal_connect(dialog, "response", G_CALLBACK(iso_dialog_response), &dialog);
+ GtkWidget *dialog;
+ GObject *foreign_menu;
+
+ g_object_get(G_OBJECT(priv->app), "ovirt-foreign-menu", &foreign_menu, NULL);
+ dialog = remote_viewer_iso_list_dialog_new(GTK_WINDOW(priv->window), foreign_menu);
+ g_object_unref(foreign_menu);
+
+ if (!dialog)
+ dialog = gtk_message_dialog_new(GTK_WINDOW(priv->window),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Unable do connnect to oVirt"));
+
+ g_signal_connect(dialog, "response", G_CALLBACK(iso_dialog_response), NULL);
gtk_widget_show_all(dialog);
gtk_dialog_run(GTK_DIALOG(dialog));
}
--
2.7.4
More information about the virt-tools-list
mailing list