LifereaHtmlView * browser_tabs_add_new (const gchar *url, const gchar *title, gboolean activate) { GtkWidget *close_button, *labelBox; tabInfo *tab; int i; tab = g_new0 (tabInfo, 1); tab->htmlview = liferea_htmlview_new (TRUE /* internal browsing */); tab->widget = liferea_htmlview_get_widget (tab->htmlview); tabs->priv->list = g_slist_append (tabs->priv->list, tab); g_object_set_data (G_OBJECT (tab->widget), "tabInfo", tab); g_signal_connect (tab->htmlview, "title-changed", G_CALLBACK (on_htmlview_title_changed), tab); g_signal_connect (tab->htmlview, "statusbar-changed", G_CALLBACK (on_htmlview_status_message), NULL); /* create tab widgets */ tab->label = gtk_label_new (create_label_text (title)); gtk_label_set_ellipsize (GTK_LABEL (tab->label), PANGO_ELLIPSIZE_END); gtk_label_set_width_chars (GTK_LABEL (tab->label), 17); labelBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_pack_start (GTK_BOX (labelBox), tab->label, FALSE, FALSE, 0); close_button = gedit_close_button_new (); gtk_box_pack_end (GTK_BOX (labelBox), close_button, FALSE, FALSE, 0); g_signal_connect ((gpointer)close_button, "clicked", G_CALLBACK (on_htmlview_close_tab), (gpointer)tab); gtk_widget_show_all (labelBox); i = gtk_notebook_append_page (tabs->priv->notebook, tab->widget, labelBox); g_signal_connect (gtk_notebook_get_nth_page (tabs->priv->notebook, i), "key-press-event", G_CALLBACK (on_tab_key_press), (gpointer)tab); gtk_notebook_set_show_tabs (tabs->priv->notebook, TRUE); gtk_notebook_set_tab_reorderable (tabs->priv->notebook, tab->widget, TRUE); if (activate && (i != -1)) gtk_notebook_set_current_page (tabs->priv->notebook, i); if (url) liferea_htmlview_launch_URL_internal (tab->htmlview, (gchar *)url); return tab->htmlview; }
LifereaHtmlView * browser_tabs_add_new (const gchar *url, const gchar *title, gboolean activate) { GtkWidget *widget, *label, *toolbar, *htmlframe, *image; tabInfo *tab; int i; tab = g_new0 (tabInfo, 1); tab->widget = gtk_vbox_new (FALSE, 0); tab->htmlview = liferea_htmlview_new (TRUE); tab->history = browser_tab_history_new (); tabs->priv->list = g_slist_append (tabs->priv->list, tab); g_object_set_data (G_OBJECT (tab->widget), "tabInfo", tab); g_signal_connect (tab->htmlview, "title-changed", G_CALLBACK (on_htmlview_title_changed), tab); g_signal_connect (tab->htmlview, "location-changed", G_CALLBACK (on_htmlview_location_changed), tab); g_signal_connect (tab->htmlview, "statusbar-changed", G_CALLBACK (on_htmlview_status_message), NULL); /* create tab widgets */ label = gtk_label_new (create_label_text (title)); gtk_label_set_ellipsize (GTK_LABEL(label), PANGO_ELLIPSIZE_END); gtk_label_set_max_width_chars (GTK_LABEL(label), 17); gtk_widget_show (label); toolbar = gtk_hbox_new (FALSE, 6); widget = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON (widget), GTK_RELIEF_NONE); image = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (widget), image); gtk_box_pack_start (GTK_BOX (toolbar), widget, FALSE, FALSE, 0); g_signal_connect ((gpointer)widget, "clicked", G_CALLBACK (on_tab_history_back), (gpointer)tab); gtk_widget_set_sensitive(widget, FALSE); tab->back = widget; widget = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON(widget), GTK_RELIEF_NONE); image = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (widget), image); gtk_box_pack_start (GTK_BOX (toolbar), widget, FALSE, FALSE, 0); g_signal_connect ((gpointer)widget, "clicked", G_CALLBACK (on_tab_history_forward), (gpointer)tab); gtk_widget_set_sensitive (widget, FALSE); tab->forward = widget; widget = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (widget), url?url:""); g_object_set_data (G_OBJECT (tab->widget), "url_entry", widget); gtk_box_pack_start (GTK_BOX (toolbar), widget, TRUE, TRUE, 0); g_signal_connect ((gpointer)widget, "activate", G_CALLBACK (on_tab_url_entry_activate), (gpointer)tab); tab->urlentry = widget; widget = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON(widget), GTK_RELIEF_NONE); image = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (widget), image); gtk_box_pack_end (GTK_BOX (toolbar), widget, FALSE, FALSE, 0); g_signal_connect ((gpointer)widget, "clicked", G_CALLBACK (on_htmlview_close_tab), (gpointer)tab); htmlframe = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (htmlframe), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (htmlframe), liferea_htmlview_get_widget (tab->htmlview)); gtk_box_pack_start (GTK_BOX (tab->widget), toolbar, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (tab->widget), htmlframe, TRUE, TRUE, 0); gtk_widget_show_all (tab->widget); i = gtk_notebook_append_page (tabs->priv->notebook, tab->widget, label); g_signal_connect (gtk_notebook_get_nth_page (tabs->priv->notebook, i), "key-press-event", G_CALLBACK (on_tab_key_press), (gpointer)tab); gtk_notebook_set_show_tabs (tabs->priv->notebook, TRUE); gtk_notebook_set_tab_reorderable (tabs->priv->notebook, tab->widget, TRUE); if (activate && (i != -1)) gtk_notebook_set_current_page (tabs->priv->notebook, i); if (url) { browser_tab_history_add_location (tab, (gchar *)url); liferea_htmlview_launch_URL_internal (tab->htmlview, (gchar *)url); } return tab->htmlview; }
void itemview_set_layout (nodeViewType newMode) { ItemViewPrivate *ivp = itemview->priv; const gchar *htmlWidgetName, *ilWidgetName, *encViewVBoxName; if (newMode == ivp->currentLayoutMode) return; ivp->currentLayoutMode = newMode; liferea_shell_set_view_mode (newMode); if (!ivp->htmlview) { GtkWidget *renderWidget; debug0 (DEBUG_GUI, "Creating HTML widget"); htmlview_init (); ivp->htmlview = liferea_htmlview_new (FALSE); liferea_htmlview_set_headline_view (ivp->htmlview); g_signal_connect (ivp->htmlview, "statusbar-changed", G_CALLBACK (on_important_status_message), NULL); renderWidget = liferea_htmlview_get_widget (ivp->htmlview); gtk_container_add (GTK_CONTAINER (liferea_shell_lookup ("normalViewHtml")), renderWidget); gtk_widget_show (renderWidget); /* Set initial zoom */ liferea_htmlview_set_zoom (itemview->priv->htmlview, itemview->priv->zoom/100.); } else { liferea_htmlview_clear (ivp->htmlview); } debug1 (DEBUG_GUI, "Setting item list layout mode: %d", newMode); switch (newMode) { case NODE_VIEW_MODE_NORMAL: htmlWidgetName = "normalViewHtml"; ilWidgetName = "normalViewItems"; encViewVBoxName = "normalViewVBox"; break; case NODE_VIEW_MODE_WIDE: htmlWidgetName = "wideViewHtml"; ilWidgetName = "wideViewItems"; encViewVBoxName = "wideViewVBox"; break; case NODE_VIEW_MODE_COMBINED: htmlWidgetName = "combinedViewHtml"; ilWidgetName = NULL; encViewVBoxName = NULL; break; default: g_warning("fatal: illegal viewing mode!"); return; break; } /* Reparenting HTML view. This avoids the overhead of new browser instances. */ g_assert (htmlWidgetName); gtk_notebook_set_current_page (GTK_NOTEBOOK (liferea_shell_lookup ("itemtabs")), newMode); gtk_widget_reparent (liferea_htmlview_get_widget (ivp->htmlview), liferea_shell_lookup (htmlWidgetName)); /* Recreate the item list view */ if (ivp->itemListViewContainer) gtk_widget_destroy (ivp->itemListViewContainer); if (ilWidgetName) { ivp->itemListView = item_list_view_create (newMode == NODE_VIEW_MODE_WIDE); ivp->itemListViewContainer = gtk_widget_get_parent (GTK_WIDGET (item_list_view_get_widget (ivp->itemListView))); g_assert (ivp->itemListViewContainer); gtk_container_add (GTK_CONTAINER (liferea_shell_lookup (ilWidgetName)), GTK_WIDGET (ivp->itemListViewContainer)); } /* Destroy previous enclosure list. */ if (ivp->enclosureView) { gtk_widget_destroy (enclosure_list_view_get_widget (ivp->enclosureView)); ivp->enclosureView = NULL; } /* Create a new enclosure list GtkTreeView. */ if (encViewVBoxName) { ivp->enclosureView = enclosure_list_view_new (); gtk_box_pack_end (GTK_BOX (liferea_shell_lookup (encViewVBoxName)), enclosure_list_view_get_widget (ivp->enclosureView), FALSE, FALSE, 0); gtk_widget_show_all (liferea_shell_lookup (encViewVBoxName)); } }