[virt-tools-list] [virt-viewer 3/7] ovirt: Use OvirtForeignMenu class

Jonathon Jongsma jjongsma at redhat.com
Wed Apr 16 21:49:03 UTC 2014



----- Original Message -----
> From: "Christophe Fergeau" <cfergeau at redhat.com>
> To: virt-tools-list at redhat.com
> Sent: Wednesday, April 16, 2014 11:59:50 AM
> Subject: [virt-tools-list] [virt-viewer 3/7] ovirt: Use OvirtForeignMenu	class
> 
> After the previous commit which introduced the OvirtForeignMenu
> class, we can now make use of it in the remote-viewer UI code.
> ---
>  src/remote-viewer.c | 61
>  +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 61 insertions(+)
> 
> diff --git a/src/remote-viewer.c b/src/remote-viewer.c
> index 4320369..fcd63fc 100644
> --- a/src/remote-viewer.c
> +++ b/src/remote-viewer.c
> @@ -30,6 +30,7 @@
>  
>  #ifdef HAVE_OVIRT
>  #include <govirt/govirt.h>
> +#include "ovirt-foreign-menu.h"
>  #endif
>  
>  #ifdef HAVE_SPICE_GTK
> @@ -413,6 +414,50 @@ spice_ctrl_menu_updated(RemoteViewer *self)
>      g_hash_table_foreach(windows, spice_menu_update_each, self);
>  }
>  
> +#ifdef HAVE_OVIRT
> +static void
> +ovirt_foreign_menu_update(VirtViewerWindow *win,
> +                          OvirtForeignMenu *foreign_menu)

Can this be renamed?  It's nearly identical to spice_ovirt_foreign_menu_update() below. It'd be nice if the names gave an indication of what the difference was so that you didn't need to inspect the implementation. Maybe something like ovirt_foreign_menu_update_for_window()?

> +{
> +    GtkWidget *menu = g_object_get_data(G_OBJECT(win), "foreign-menu");
> +    GtkWidget *submenu;
> +    GtkMenuShell *shell =
> GTK_MENU_SHELL(gtk_builder_get_object(virt_viewer_window_get_builder(win),
> "top-menu"));
> +
> +    if (menu != NULL)
> +        gtk_widget_destroy(menu);
> +
> +    menu = gtk_menu_item_new_with_label(_("CDRoms"));

"CDRoms" looks a bit strange.  In the user portal, there's a menu item called "Change CD".  Should we use similar terminology?

> +    gtk_menu_shell_append(shell, menu);
> +    g_object_set_data(G_OBJECT(win), "foreign-menu", menu);
> +
> +    submenu = ovirt_foreign_menu_get_gtk_menu(foreign_menu);
> +    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu);
> +
> +    gtk_widget_show_all(menu);
> +}
> +
> +static void
> +ovirt_foreign_menu_update_each(gpointer key G_GNUC_UNUSED,
> +                               gpointer value,
> +                               gpointer user_data)
> +{
> +    ovirt_foreign_menu_update(VIRT_VIEWER_WINDOW(value),
> +                              OVIRT_FOREIGN_MENU(user_data));
> +}
> +
> +static void
> +spice_ovirt_foreign_menu_update(RemoteViewer *self,
> +                                OvirtForeignMenu *foreign_menu)
> +{
> +    GHashTable *windows =
> virt_viewer_app_get_windows(VIRT_VIEWER_APP(self));
> +
> +    DEBUG_LOG("Spice foreign menu updated");
> +
> +    g_hash_table_foreach(windows, ovirt_foreign_menu_update_each,
> +                         foreign_menu);
> +}
> +#endif
> +
>  static void
>  foreign_menu_update(RemoteViewer *self, VirtViewerWindow *win)
>  {
> @@ -707,6 +752,14 @@ authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED
> RestProxyAuth *auth,
>  }
>  
>  
> +static void
> +ovirt_foreign_menu_changed(OvirtForeignMenu *foreign_menu,
> +                           GParamSpec *pspec G_GNUC_UNUSED,
> +                           VirtViewerApp *app)
> +{
> +    spice_ovirt_foreign_menu_update(REMOTE_VIEWER(app), foreign_menu);
> +}
> +
>  static gboolean
>  create_ovirt_session(VirtViewerApp *app, const char *uri)
>  {
> @@ -791,6 +844,14 @@ create_ovirt_session(VirtViewerApp *app, const char
> *uri)
>          goto error;
>      }
>  
> +    {
> +        OvirtForeignMenu *menu = ovirt_foreign_menu_new(proxy);
> +        g_object_set(G_OBJECT(menu), "api", api, "vm", vm, NULL);
> +        g_signal_connect(G_OBJECT(menu), "notify::files",
> +                         (GCallback)ovirt_foreign_menu_changed, app);

What about new windows that are created after the notify::files signal fires? As far as I can tell, they won't have a foreign menu unless the list of files changes.


> +        ovirt_foreign_menu_start(menu);
> +    }
> +
>      virt_viewer_app_set_connect_info(app, NULL, ghost, gport, gtlsport,
>                                       session_type, NULL, NULL, 0, NULL);
>  
> --
> 1.9.0
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
> 




More information about the virt-tools-list mailing list