static void colorful_tabs_deactivate_cb (MidoriExtension* extension, MidoriBrowser* browser) { guint i; GtkWidget* view; MidoriApp* app = midori_extension_get_app (extension); g_signal_handlers_disconnect_by_func ( app, colorful_tabs_app_add_browser_cb, extension); g_signal_handlers_disconnect_by_func ( browser, colorful_tabs_browser_add_tab_cb, extension); g_signal_handlers_disconnect_by_func ( extension, colorful_tabs_deactivate_cb, browser); i = 0; while ((view = midori_browser_get_nth_tab (browser, i++))) { GtkWidget* label = midori_view_get_proxy_tab_label (MIDORI_VIEW (view)); gtk_event_box_set_visible_window (GTK_EVENT_BOX (label), FALSE); gtk_widget_modify_bg (label, GTK_STATE_NORMAL, NULL); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, NULL); gtk_container_foreach (GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (label))), (GtkCallback) colorful_tabs_modify_fg, NULL); g_signal_handlers_disconnect_by_func ( view, colorful_tabs_view_notify_uri_cb, extension); } }
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 KatzeThrobber* _interface_tweaks_find_view_throbber(MidoriView *inView) { g_return_val_if_fail(MIDORI_IS_VIEW(inView), NULL); GtkWidget *widget; KatzeThrobber *throbber=NULL; widget=midori_view_get_proxy_tab_label(inView); if(KATZE_IS_THROBBER(widget)) throbber=KATZE_THROBBER(widget); else if(GTK_IS_CONTAINER(widget)) gtk_container_foreach(GTK_CONTAINER(widget), _interface_tweaks_find_view_throbber_callback, &throbber); return(throbber); }
static GtkWidget* _interface_tweaks_find_view_close_button(MidoriView *inView) { g_return_val_if_fail(MIDORI_IS_VIEW(inView), NULL); GtkWidget *widget; GtkWidget *closeButton=NULL; widget=midori_view_get_proxy_tab_label(inView); if(g_strcmp0(gtk_widget_get_name(widget), "midori-close-button")==0) closeButton=GTK_WIDGET(widget); else if(GTK_IS_CONTAINER(widget)) gtk_container_foreach(GTK_CONTAINER(widget), _interface_tweaks_find_view_close_button_callback, &closeButton); return(closeButton); }
static void colorful_tabs_view_notify_uri_cb (MidoriView* view, GParamSpec* pspec, MidoriExtension* extension) { GtkWidget* label; SoupURI* uri; gchar* hash; gchar* colorstr; GdkColor color; label = midori_view_get_proxy_tab_label (view); if (!midori_extension_get_boolean (extension, "tint")) { gtk_widget_modify_bg (label, GTK_STATE_NORMAL, NULL); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, NULL); return; } /* Find a color that is unique to an address. We merely compute a hash value, pick the first 6 + 1 characters and turn the first into a hash sign, ie. #8b424b. In case a color is too dark, we lighten it up a litte. Finally we make the event box visible and modify its background. */ if ((uri = soup_uri_new (midori_view_get_display_uri (view))) && uri->host) { hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri->host, -1); soup_uri_free (uri); colorstr = g_strndup (hash, 6 + 1); g_free (hash); colorstr[0] = '#'; gdk_color_parse (colorstr, &color); if (color.red < 35000) color.red += 25000 + (color.blue + 1) / 2; if (color.green < 35000) color.green += 25000 + (color.red + 1) / 2; if (color.blue < 35000) color.blue += 25000 + (color.green + 1) / 2; gtk_event_box_set_visible_window (GTK_EVENT_BOX (label), TRUE); gtk_widget_modify_bg (label, GTK_STATE_NORMAL, &color); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, &color); } else { gtk_widget_modify_bg (label, GTK_STATE_NORMAL, NULL); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, NULL); } }
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); }
static void colorful_tabs_view_notify_uri_cb (MidoriView* view, GParamSpec* pspec, MidoriExtension* extension) { GtkWidget* box; GtkWidget* label; SoupURI* uri; gchar* colorstr; GdkColor color; GdkColor fgcolor; GdkPixbuf* icon; label = midori_view_get_proxy_tab_label (view); if ((uri = soup_uri_new (midori_view_get_display_uri (view))) && uri->host && (katze_object_get_enum (view, "load-status") == MIDORI_LOAD_FINISHED)) { icon = midori_view_get_icon (view); if (midori_view_get_icon_uri (view) != NULL) { GdkPixbuf* newpix; guchar* pixels; newpix = gdk_pixbuf_scale_simple (icon, 1, 1, GDK_INTERP_BILINEAR); g_return_if_fail (gdk_pixbuf_get_bits_per_sample (newpix) == 8); pixels = gdk_pixbuf_get_pixels (newpix); color.red = pixels[0] * 225; color.green = pixels[1] * 225; color.blue = pixels[2] * 225; } else { gchar* hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri->host, 1); colorstr = g_strndup (hash, 6 + 1); g_free (hash); colorstr[0] = '#'; gdk_color_parse (colorstr, &color); } soup_uri_free (uri); if ((color.red < 35000) && (color.green < 35000) && (color.blue < 35000)) { color.red += 20000; color.green += 20000; color.blue += 20000; } /* Ensure high contrast by enforcing black/ white text colour. */ if ((color.red < 41000) && (color.green < 41000) && (color.blue < 41000)) gdk_color_parse ("#fff", &fgcolor); else gdk_color_parse ("#000", &fgcolor); box = gtk_bin_get_child (GTK_BIN (label)); gtk_event_box_set_visible_window (GTK_EVENT_BOX (label), TRUE); gtk_container_foreach (GTK_CONTAINER (box), (GtkCallback) colorful_tabs_modify_fg, &fgcolor); gtk_widget_modify_bg (label, GTK_STATE_NORMAL, &color); if (color.red < 10000) color.red = 5000; else color.red -= 5000; if (color.blue < 10000) color.blue = 5000; else color.blue -= 5000; if (color.green < 10000) color.green = 5000; else color.green -= 5000; gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, &color); } else { gtk_widget_modify_bg (label, GTK_STATE_NORMAL, NULL); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, NULL); gtk_container_foreach (GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (label))), (GtkCallback) colorful_tabs_modify_fg, NULL); } }