static void tab_panel_browser_foreach_cb (GtkWidget* view, MidoriExtension* extension) { tab_panel_browser_add_tab_cb (midori_browser_get_for_widget (view), view, extension); }
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_toolitem_clicked_cb (GtkToolItem* toolitem, GtkWidget* view) { MidoriBrowser* browser = midori_browser_get_for_widget (view); midori_browser_set_current_tab (browser, view); }
static void cm_button_delete_all_clicked_cb(GtkToolButton *button, CookieManagerPage *cmp) { GtkWidget *dialog; const gchar *filter_text; MidoriBrowser *toplevel = midori_browser_get_for_widget(GTK_WIDGET(button)); CookieManagerPagePrivate *priv = cmp->priv; dialog = gtk_message_dialog_new(GTK_WINDOW(toplevel), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Do you really want to delete all cookies?")); gtk_window_set_title(GTK_WINDOW(dialog), _("Question")); /* steal Midori's icon :) */ if (toplevel != NULL) gtk_window_set_icon_name(GTK_WINDOW(dialog), gtk_window_get_icon_name(GTK_WINDOW(toplevel))); if (!g_object_get_data (G_OBJECT (priv->filter_entry), "sokoke_has_default")) { filter_text = gtk_entry_get_text(GTK_ENTRY(priv->filter_entry)); if (*filter_text != '\0') { gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), _("Only cookies which match the filter will be deleted.")); } } if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) cm_delete_all_cookies_real(cmp); gtk_widget_destroy(dialog); }
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], -1); } }
static gboolean mouse_gestures_activate_action (MidoriView* view, const gchar* name) { MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (view)); midori_browser_activate_action (browser, name); return TRUE; }
static void tab_panel_view_notify_minimized_cb (GtkWidget* view, GParamSpec* pspec, MidoriExtension* extension) { MidoriBrowser* browser = midori_browser_get_for_widget (view); gboolean minimized = katze_object_get_boolean (view, "minimized"); tab_panel_remove_view (browser, view, !minimized); tab_panel_browser_add_tab_cb (browser, view, extension); }
static gboolean midori_extension_button_release_event_cb (GtkWidget* widget, GdkEventButton* event, MidoriExtension* extension) { GtkTreeModel* model; GtkTreeIter iter; if (event->button < 1 || event->button > 3) return FALSE; if (katze_tree_view_get_selected_iter (GTK_TREE_VIEW (widget), &model, &iter)) { GtkWidget* view; gtk_tree_model_get (model, &iter, 0, &view, -1); if (event->button == 1) { MidoriBrowser* browser = midori_browser_get_for_widget (widget); GtkTreeViewColumn* column; if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, &column, NULL, NULL) && column == gtk_tree_view_get_column (GTK_TREE_VIEW (widget), 1)) midori_browser_remove_tab (browser, view); else midori_browser_set_current_tab (browser, view); } else if (event->button == 2) midori_browser_remove_tab (midori_browser_get_for_widget (widget), view); else tab_panel_popup (widget, event, view); g_object_unref (view); return TRUE; } return FALSE; }
static void page_holder_button_add_clicked_cb (GtkWidget* button, GtkWidget* notebook) { gint n; GtkWidget* view; MidoriBrowser* browser; const gchar* uri; n = page_holder_notebook_append_view (notebook); view = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), n); browser = midori_browser_get_for_widget (notebook); uri = midori_browser_get_current_uri (browser); midori_view_set_uri (MIDORI_VIEW (view), uri); }
/* A tab of a browser was reordered */ static void _interface_tweaks_on_tab_reordered(InterfaceTweaks *self, GtkWidget *inChild, guint inPageNumber, gpointer inUserData) { g_return_if_fail(IS_INTERFACE_TWEAKS(self)); g_return_if_fail(MIDORI_IS_VIEW(inChild)); g_return_if_fail(GTK_IS_NOTEBOOK(inUserData)); InterfaceTweaksPrivate *priv=self->priv; MidoriView *view=MIDORI_VIEW(inChild); GtkNotebook *notebook=GTK_NOTEBOOK(inUserData); MidoriBrowser *browser; gboolean minimized; gint firstMaximizedPosition; /* Check if tab we should group minimized tabs to front */ if(!priv->groupMinimizedTabs) return; /* Check if tab was minimized */ minimized=FALSE; g_object_get(view, "minimized", &minimized, NULL); /* Get browser of tab */ browser=midori_browser_get_for_widget(GTK_WIDGET(view)); if(!browser) return; /* Find position of first maximized tab */ firstMaximizedPosition=_interface_tweak_get_browser_first_maximized_tab_position(browser, view); /* If tab is maximized then it moves away from front and * the position must be decreased by one to get the first maximized tab */ if(!minimized) firstMaximizedPosition--; /* Reorder tab now */ if(firstMaximizedPosition<0) firstMaximizedPosition=0; if((minimized==TRUE && inPageNumber>=firstMaximizedPosition) || (minimized==FALSE && inPageNumber<firstMaximizedPosition)) { g_signal_handlers_block_by_func(view, G_CALLBACK(_interface_tweaks_on_notify_minimized_tab_for_group_tabs), self); gtk_notebook_reorder_child(GTK_NOTEBOOK(notebook), GTK_WIDGET(view), firstMaximizedPosition); g_signal_handlers_unblock_by_func(view, G_CALLBACK(_interface_tweaks_on_notify_minimized_tab_for_group_tabs), self); } }
static gint page_holder_notebook_append_view (GtkWidget* notebook) { GtkWidget* view; MidoriBrowser* browser; MidoriWebSettings *settings; GtkWidget* label; view = midori_view_new (NULL); browser = midori_browser_get_for_widget (notebook); settings = katze_object_get_object (browser, "settings"); midori_view_set_settings (MIDORI_VIEW (view), settings); g_object_unref (settings); gtk_widget_show (view); label = midori_view_get_proxy_tab_label (MIDORI_VIEW (view)); return gtk_notebook_append_page (GTK_NOTEBOOK (notebook), view, label); }
/* A tab was minimized (pinned) or maximized (unpinned) - Check for grouping tabs */ static void _interface_tweaks_on_notify_minimized_tab_for_group_tabs(InterfaceTweaks *self, GParamSpec *inSpec, gpointer inUserData) { g_return_if_fail(IS_INTERFACE_TWEAKS(self)); g_return_if_fail(MIDORI_IS_VIEW(inUserData)); InterfaceTweaksPrivate *priv=self->priv; MidoriView *view=MIDORI_VIEW(inUserData); gboolean minimized; MidoriBrowser *browser; GtkContainer *notebook; gint firstMaximizedPosition; /* Check if tab was minimized */ minimized=FALSE; g_object_get(view, "minimized", &minimized, NULL); /* Check if tab we should group minimized tabs to front */ if(!priv->groupMinimizedTabs) return; /* Get browser of tab */ browser=midori_browser_get_for_widget(GTK_WIDGET(view)); if(!browser) return; /* Get notebook containing tabs of browser */ notebook=NULL; g_object_get(browser, "notebook", ¬ebook, NULL); if(!notebook) return; /* Find position of first maximized tab */ firstMaximizedPosition=_interface_tweak_get_browser_first_maximized_tab_position(browser, view); /* If tab is maximized then it moves away from front and * the position must be decreased by one to get the first maximized tab */ if(!minimized) firstMaximizedPosition--; /* Reorder tab now */ g_signal_handlers_block_by_func(view, G_CALLBACK(_interface_tweaks_on_notify_minimized_tab_for_group_tabs), self); if(firstMaximizedPosition<0) firstMaximizedPosition=0; gtk_notebook_reorder_child(GTK_NOTEBOOK(notebook), GTK_WIDGET(view), firstMaximizedPosition); g_signal_handlers_unblock_by_func(view, G_CALLBACK(_interface_tweaks_on_notify_minimized_tab_for_group_tabs), self); g_object_unref(notebook); }
static void statusbar_features_deactivate_cb (MidoriExtension* extension, GtkWidget* bbox) { MidoriApp* app = midori_extension_get_app (extension); MidoriBrowser* browser = midori_browser_get_for_widget (bbox); GtkWidget* toolbar = katze_object_get_object (browser, "navigationbar"); gtk_widget_destroy (bbox); g_signal_handlers_disconnect_matched (toolbar, G_SIGNAL_MATCH_FUNC, 0, -1, NULL, statusbar_features_toolbar_notify_toolbar_style_cb, NULL); g_object_unref (toolbar); g_signal_handlers_disconnect_by_func ( extension, statusbar_features_deactivate_cb, bbox); g_signal_handlers_disconnect_by_func ( app, statusbar_features_app_add_browser_cb, extension); }
static void midori_extension_row_activated_cb (GtkTreeView* treeview, GtkTreePath* path, GtkTreeViewColumn* column, MidoriExtension* extension) { GtkTreeModel* model; GtkTreeIter iter; model = gtk_tree_view_get_model (treeview); if (gtk_tree_model_get_iter (model, &iter, path)) { GtkWidget* view; MidoriBrowser* browser; gtk_tree_model_get (model, &iter, 0, &view, -1); browser = midori_browser_get_for_widget (GTK_WIDGET (treeview)); midori_browser_set_current_tab (browser, view); g_object_unref (view); } }
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); g_signal_handlers_disconnect_by_func ( browser, tab_panel_browser_move_tab_cb, NULL); gtk_widget_destroy (treeview); }
// ZRL 目前只识别缩放比例设置,将来扩展状态栏工具时再充实该函数 GtkWidget* statusbar_features_property_proxy (MidoriWebSettings* settings, const gchar* property, GtkWidget* toolbar) { const gchar* kind = NULL; GtkWidget* button = NULL; GtkWidget* image; // ZRL 暂时屏蔽其他功能 2014.12.20 #if 0 if (!strcmp (property, "auto-load-images") || !strcmp (property, "enable-javascript") || !strcmp (property, "enable-plugins")) kind = "toggle"; else if (!strcmp (property, "identify-as")) kind = "custom-user-agent"; else if (strstr (property, "font") != NULL) kind = "font"; else if (!strcmp (property, "zoom-level")) #else if (!strcmp (property, "zoom-level")) #endif { MidoriBrowser* browser = midori_browser_get_for_widget (toolbar); guint i; button = gtk_combo_box_text_new_with_entry (); gtk_entry_set_width_chars (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (button))), 4); for (i = 0; i < G_N_ELEMENTS (zoom_levels); i++) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (button), zoom_levels[i].label); g_signal_connect (button, "changed", G_CALLBACK (statusbar_features_zoom_level_changed_cb), browser); g_signal_connect (browser, "notify::tab", G_CALLBACK (statusbar_features_browser_notify_tab_cb), button); statusbar_features_browser_notify_tab_cb (browser, NULL, button); return button; } // ZRL 暂时屏蔽其他功能 2014.12.20 #if 0 button = katze_property_proxy (settings, property, kind); if (GTK_IS_BIN (button)) { GtkWidget* label = gtk_bin_get_child (GTK_BIN (button)); if (GTK_IS_LABEL (label)) gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); } if (!strcmp (property, "auto-load-images")) { g_object_set_data (G_OBJECT (button), "feature-label", _("Images")); image = gtk_image_new_from_stock (STOCK_IMAGE, GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), image); gtk_widget_set_tooltip_text (button, _("Load images automatically")); statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button); g_signal_connect (toolbar, "notify::toolbar-style", G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button); } if (!strcmp (property, "enable-javascript")) { g_object_set_data (G_OBJECT (button), "feature-label", _("Scripts")); image = gtk_image_new_from_stock (STOCK_SCRIPT, GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), image); gtk_widget_set_tooltip_text (button, _("Enable scripts")); statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button); g_signal_connect (toolbar, "notify::toolbar-style", G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button); } else if (!strcmp (property, "enable-plugins")) { if (!midori_web_settings_has_plugin_support ()) gtk_widget_hide (button); g_object_set_data (G_OBJECT (button), "feature-label", _("Netscape plugins")); image = gtk_image_new_from_stock (MIDORI_STOCK_PLUGINS, GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), image); gtk_widget_set_tooltip_text (button, _("Enable Netscape plugins")); statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button); g_signal_connect (toolbar, "notify::toolbar-style", G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button); } #endif return button; }