[virt-tools-list] [PATCH virt-viewer] window: Factor out common code for toolbar items

Fabiano Fidêncio fidencio at redhat.com
Tue Jun 28 15:16:55 UTC 2016


On Tue, Jun 28, 2016 at 5:10 PM, Pavel Grunt <pgrunt at redhat.com> wrote:
> Create toolbar widget in the loop

NACK from my side.
There is any gain on re-factoring a code that will be removed as soon
as we do the release.
Actually, it just makes my life harder in order to rebase Sagar's
patches on top of this change.

> ---
>  src/virt-viewer-window.c | 121 ++++++++++++++++++++++++++++++++---------------
>  1 file changed, 83 insertions(+), 38 deletions(-)
>
> diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
> index 1ebb423..b276ae8 100644
> --- a/src/virt-viewer-window.c
> +++ b/src/virt-viewer-window.c
> @@ -1062,56 +1062,101 @@ virt_viewer_window_menu_help_about(GtkWidget *menu G_GNUC_UNUSED,
>      g_object_unref(G_OBJECT(about));
>  }
>
> +typedef struct {
> +    GtkWidget *icon;
> +    const gchar *icon_name;
> +    const gchar *label;
> +    const gchar *tooltip;
> +    const gboolean sensitive;
> +    const gboolean show_label;
> +    const GCallback callback;
> +} VirtViewerToolbarButton;
> +
> +static void
> +virt_viewer_window_toolbar_add_button(VirtViewerWindow *self,
> +                                      const VirtViewerToolbarButton *tb_button,
> +                                      GtkWidget **dest_widget)
> +{
> +    VirtViewerWindowPrivate *priv = self->priv;
> +    GtkToolItem *button = gtk_tool_button_new(tb_button->icon, tb_button->label);
> +
> +    gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), tb_button->icon_name);
> +    gtk_tool_item_set_tooltip_text(button, tb_button->tooltip);
> +    gtk_tool_item_set_is_important(button, tb_button->show_label);
> +    gtk_widget_set_sensitive(GTK_WIDGET(button), tb_button->sensitive);
> +    gtk_widget_show_all(GTK_WIDGET(button));
> +    gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), button, 0);
> +    g_signal_connect(button, "clicked", tb_button->callback, self);
> +
> +    if (dest_widget != NULL)
> +        *dest_widget = GTK_WIDGET(button);
> +}
>
>  static void
>  virt_viewer_window_toolbar_setup(VirtViewerWindow *self)
>  {
> -    GtkWidget *button;
>      GtkWidget *overlay;
>      VirtViewerWindowPrivate *priv = self->priv;
> +    guint i;
> +
> +    const struct {
> +        const VirtViewerToolbarButton tb_button;
> +        GtkWidget **dest_widget;
> +    } toolbar_buttons[] = {
> +        {   /* Close connection */
> +            {
> +                NULL,
> +                "window-close",
> +                NULL,
> +                _("Disconnect"),
> +                TRUE,
> +                FALSE,
> +                G_CALLBACK(virt_viewer_window_menu_file_quit),
> +            },
> +            NULL,
> +        },{ /* USB Device selection */
> +            {
> +                gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24/virt-viewer-usb.png"),
> +                NULL,
> +                _("USB device selection"),
> +                _("USB device selection"),
> +                TRUE,
> +                FALSE,
> +                G_CALLBACK(virt_viewer_window_menu_file_usb_device_selection),
> +            },
> +            &priv->toolbar_usb_device_selection,
> +        },{ /* Send key */
> +            {
> +                NULL,
> +                "preferences-desktop-keyboard-shortcuts",
> +                NULL,
> +                _("Send key combination"),
> +                FALSE,
> +                FALSE,
> +                G_CALLBACK(virt_viewer_window_toolbar_send_key),
> +            },
> +            &priv->toolbar_send_key,
> +        },{ /* Leave fullscreen */
> +            {
> +                NULL,
> +                "view-restore",
> +                _("Leave fullscreen"),
> +                _("Leave fullscreen"),
> +                TRUE,
> +                TRUE,
> +                G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen),
> +            },
> +            NULL,
> +        },
> +    };
>
>      priv->toolbar = g_object_ref(gtk_toolbar_new());
>      gtk_toolbar_set_show_arrow(GTK_TOOLBAR(priv->toolbar), FALSE);
>      gtk_widget_set_no_show_all(priv->toolbar, TRUE);
>      gtk_toolbar_set_style(GTK_TOOLBAR(priv->toolbar), GTK_TOOLBAR_BOTH_HORIZ);
>
> -    /* Close connection */
> -    button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL));
> -    gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "window-close");
> -    gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("Disconnect"));
> -    gtk_widget_show(button);
> -    gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM (button), 0);
> -    g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_menu_file_quit), self);
> -
> -    /* USB Device selection */
> -    button = gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24/virt-viewer-usb.png");
> -    button = GTK_WIDGET(gtk_tool_button_new(button, NULL));
> -    gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), _("USB device selection"));
> -    gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("USB device selection"));
> -    gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0);
> -    g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_menu_file_usb_device_selection), self);
> -    priv->toolbar_usb_device_selection = button;
> -    gtk_widget_show_all(button);
> -
> -    /* Send key */
> -    button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL));
> -    gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "preferences-desktop-keyboard-shortcuts");
> -    gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("Send key combination"));
> -    gtk_widget_show(button);
> -    gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0);
> -    g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_toolbar_send_key), self);
> -    gtk_widget_set_sensitive(button, FALSE);
> -    priv->toolbar_send_key = button;
> -
> -    /* Leave fullscreen */
> -    button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL));
> -    gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "view-restore");
> -    gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), _("Leave fullscreen"));
> -    gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("Leave fullscreen"));
> -    gtk_tool_item_set_is_important(GTK_TOOL_ITEM(button), TRUE);
> -    gtk_widget_show(button);
> -    gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0);
> -    g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), self);
> +    for (i = 0; i < G_N_ELEMENTS(toolbar_buttons); i++)
> +        virt_viewer_window_toolbar_add_button(self, &(toolbar_buttons[i].tb_button), toolbar_buttons[i].dest_widget);
>
>      priv->revealer = virt_viewer_timed_revealer_new(priv->toolbar);
>      overlay = GTK_WIDGET(gtk_builder_get_object(priv->builder, "viewer-overlay"));
> --
> 2.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