On Tue, Jun 28, 2016 at 5:10 PM, Pavel Grunt <pgrunt@xxxxxxxxxx> 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@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list