static void tab_panel_view_notify_title_cb (GtkWidget* view, GParamSpec* pspec, MidoriExtension* extension) { MidoriBrowser* browser = midori_browser_get_for_widget (view); gboolean minimized = katze_object_get_boolean (view, "minimized"); const gchar* title = midori_view_get_display_title (MIDORI_VIEW (view)); if (minimized) { GtkToolItem* toolitem = tab_panel_get_toolitem_for_view (view); gtk_tool_item_set_tooltip_text (toolitem, title); } else { GtkTreeModel* model = tab_panel_get_model_for_browser (browser); GtkTreeIter iter; if (tab_panel_get_iter_for_view (model, &iter, view)) { gtk_tree_store_set (GTK_TREE_STORE (model), &iter, 4, title, 5, midori_view_get_label_ellipsize (MIDORI_VIEW (view)), -1); } } }
static void tab_panel_view_notify_icon_cb (GtkWidget* view, GParamSpec* pspec, MidoriExtension* extension) { MidoriBrowser* browser = midori_browser_get_for_widget (view); gboolean minimized = katze_object_get_boolean (view, "minimized"); GdkPixbuf* icon = midori_view_get_icon (MIDORI_VIEW (view)); if (minimized) { GtkToolItem* toolitem = tab_panel_get_toolitem_for_view (view); GtkWidget* image = gtk_tool_button_get_icon_widget (GTK_TOOL_BUTTON (toolitem)); gtk_image_set_from_pixbuf (GTK_IMAGE (image), icon); } else { GtkTreeModel* model = tab_panel_get_model_for_browser (browser); GtkTreeIter iter; GtkWidget* label = midori_view_get_proxy_tab_label (MIDORI_VIEW (view)); GtkStyle* style = gtk_widget_get_style (label); if (tab_panel_get_iter_for_view (model, &iter, view)) gtk_tree_store_set (GTK_TREE_STORE (model), &iter, 3, icon, 6, &style->bg[GTK_STATE_NORMAL], 7, &style->fg[GTK_STATE_NORMAL], -1); } }
static void tab_panel_deactivate_cb (MidoriExtension* extension, GtkWidget* treeview) { MidoriApp* app = midori_extension_get_app (extension); GtkTreeModel* model; MidoriBrowser* browser; browser = midori_browser_get_for_widget (treeview); g_object_set (browser, "show-tabs", TRUE, NULL); model = tab_panel_get_model_for_browser (browser); g_object_unref (model); g_signal_handlers_disconnect_by_func ( extension, tab_panel_deactivate_cb, treeview); g_signal_handlers_disconnect_by_func ( app, tab_panel_app_add_browser_cb, extension); g_signal_handlers_disconnect_by_func ( browser, tab_panel_browser_add_tab_cb, extension); g_signal_handlers_disconnect_by_func ( browser, tab_panel_browser_remove_tab_cb, extension); g_signal_handlers_disconnect_by_func ( browser, tab_panel_browser_notify_tab_cb, treeview); g_signal_handlers_disconnect_by_func ( browser, tab_panel_settings_notify_cb, model); g_signal_handlers_disconnect_by_func ( browser, tab_panel_view_notify_minimized_cb, extension); g_signal_handlers_disconnect_by_func ( browser, tab_panel_view_notify_icon_cb, extension); g_signal_handlers_disconnect_by_func ( browser, tab_panel_view_notify_title_cb, extension); gtk_widget_destroy (treeview); }
static void tab_panel_browser_add_tab_cb (MidoriBrowser* browser, GtkWidget* view, MidoriExtension* extension) { GtkWidget* notebook = katze_object_get_object (browser, "notebook"); gint page = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), view); MidoriWebSettings* settings = midori_browser_get_settings (browser); gboolean minimized = katze_object_get_boolean (view, "minimized"); GdkPixbuf* icon = midori_view_get_icon (MIDORI_VIEW (view)); const gchar* title = midori_view_get_display_title (MIDORI_VIEW (view)); GtkTreeModel* model = tab_panel_get_model_for_browser (browser); if (minimized) { GtkWidget* toolbar = tab_panel_get_toolbar_for_browser (browser); GtkWidget* image = gtk_image_new_from_pixbuf ( midori_view_get_icon (MIDORI_VIEW (view))); GtkToolItem* toolitem = gtk_tool_button_new (image, NULL); gtk_tool_item_set_tooltip_text (toolitem, title); gtk_widget_show (image); g_object_set_data (G_OBJECT (view), "tab-panel-ext-toolitem", toolitem); gtk_widget_show (GTK_WIDGET (toolitem)); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1); tab_panel_toggle_toolbook (toolbar); g_signal_connect (toolitem, "clicked", G_CALLBACK (tab_panel_toolitem_clicked_cb), view); g_signal_connect (gtk_bin_get_child (GTK_BIN (toolitem)), "button-press-event", G_CALLBACK (tab_panel_toolitem_button_press_event_cb), view); } else { GtkTreeIter iter; gboolean buttons = katze_object_get_boolean (settings, "close-buttons-on-tabs"); gint ellipsize = midori_view_get_label_ellipsize (MIDORI_VIEW (view)); gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter, NULL, page, 0, view, 1, GTK_STOCK_CLOSE, 2, buttons, 3, icon, 4, title, 5, ellipsize, 6, NULL, -1); } if (!g_signal_handler_find (view, G_SIGNAL_MATCH_FUNC, g_signal_lookup ("notify", MIDORI_TYPE_VIEW), 0, NULL, tab_panel_view_notify_minimized_cb, extension)) { g_signal_connect (settings, "notify::close-buttons-on-tabs", G_CALLBACK (tab_panel_settings_notify_cb), model); g_signal_connect (view, "notify::minimized", G_CALLBACK (tab_panel_view_notify_minimized_cb), extension); g_signal_connect (view, "notify::icon", G_CALLBACK (tab_panel_view_notify_icon_cb), extension); g_signal_connect (view, "notify::title", G_CALLBACK (tab_panel_view_notify_title_cb), extension); } g_object_unref (notebook); }
static void tab_panel_browser_notify_tab_cb (MidoriBrowser* browser, GParamSpec* pspec, GtkTreeView* treeview) { GtkTreeModel* model = tab_panel_get_model_for_browser (browser); GtkTreeIter iter; GtkWidget* view; if (g_object_get_data (G_OBJECT (browser), "midori-browser-destroyed")) return; view = midori_browser_get_current_tab (browser); if (tab_panel_get_iter_for_view (model, &iter, view)) { GtkTreeSelection* selection = gtk_tree_view_get_selection (treeview); gtk_tree_selection_select_iter (selection, &iter); } }
static void tab_panel_remove_view (MidoriBrowser* browser, GtkWidget* view, gboolean minimized) { if (minimized) { GtkToolItem* toolitem = tab_panel_get_toolitem_for_view (view); GtkWidget* toolbar = tab_panel_get_toolbar_for_browser (browser); gtk_widget_destroy (GTK_WIDGET (toolitem)); tab_panel_toggle_toolbook (toolbar); } else { GtkTreeModel* model = tab_panel_get_model_for_browser (browser); GtkTreeIter iter; if (tab_panel_get_iter_for_view (model, &iter, view)) gtk_tree_store_remove (GTK_TREE_STORE (model), &iter); } }
G_CALLBACK (tab_panel_app_add_browser_cb), extension); } static void tab_panel_browser_move_tab_cb (MidoriBrowser* browser, GtkNotebook* notebook, gint cur_pos, gint new_pos, gpointer user_data) { GtkTreeIter cur, new; gint last_page; GtkTreeModel *model; last_page = gtk_notebook_get_n_pages (notebook) - 1; model = tab_panel_get_model_for_browser (browser); gtk_tree_model_iter_nth_child (model, &cur, NULL, cur_pos); if (cur_pos == 0 && new_pos == last_page) gtk_tree_store_move_before (GTK_TREE_STORE (model), &cur, NULL); else if (cur_pos == last_page && new_pos == 0) gtk_tree_store_move_after (GTK_TREE_STORE (model), &cur, NULL); else { gtk_tree_model_iter_nth_child (model, &new, NULL, new_pos); gtk_tree_store_swap (GTK_TREE_STORE (model), &cur, &new); } } MidoriExtension*