On 18/01/17 10:53, Christophe Fergeau wrote: > On Wed, Jan 18, 2017 at 10:08:42AM -0200, Eduardo Lima (Etrunko) wrote: >> On 18/01/17 09:53, Eduardo Lima (Etrunko) wrote: >>> On 17/01/17 14:00, Christophe Fergeau wrote: >>>> On Fri, Jan 13, 2017 at 07:11:07PM -0200, Eduardo Lima (Etrunko) wrote: >>>>> 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@xxxxxxxxxx> >>>>> --- >>>>> src/remote-viewer-iso-list-dialog.c | 31 +++++++++++++++++++++++-------- >>>>> src/remote-viewer-iso-list-dialog.h | 2 +- >>>>> src/remote-viewer.c | 37 +++++++++++++++++++++++++++++++++++++ >>>>> 3 files changed, 61 insertions(+), 9 deletions(-) >>>>> >>>>> diff --git a/src/remote-viewer-iso-list-dialog.c b/src/remote-viewer-iso-list-dialog.c >>>>> index 0fbea28..858719c 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,11 +34,16 @@ G_DEFINE_TYPE(RemoteViewerISOListDialog, remote_viewer_iso_list_dialog, GTK_TYPE >>>>> struct _RemoteViewerISOListDialogPrivate >>>>> { >>>>> GtkWidget *stack; >>>>> + OvirtForeignMenu *foreign_menu; >>>>> }; >>>>> >>>>> 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); >>>>> } >>>>> >>>>> @@ -94,13 +100,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)); >>>> >>>> Fwiw, a construct-only GObject property would be more expected (but you >>>> can keep it this way i f you think it's better). >>> >>> >>> No objections, I will change it. >> >> >> Thinking better about this, it is not possible to make it a construct >> only, because the ovirt object is created later on the process, when >> remote-viewer has already started. Also, there is the possibility of the >> pointer being set or not, depending on how the application was invoked. > > I don't understand what you mean here. In the part of the code quoted > above, a RemoteViewerISOListDialog instance is created, and right after > that, we set self->priv->foreign_menu on that instance, so in this case, > a CONSTRUCT_ONLY property would be fine. The ovirt-foreign-menu property is installed as a member of RemoteViewer object, not RemoteViewerISODialog. -- Eduardo de Barros Lima (Etrunko) Software Engineer - RedHat etrunko@xxxxxxxxxx _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list