diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | embed/mozilla/ContentHandler.cpp | 6 | ||||
-rw-r--r-- | lib/ephy-gui.c | 72 | ||||
-rw-r--r-- | lib/ephy-gui.h | 3 | ||||
-rw-r--r-- | lib/widgets/ephy-spinner.c | 35 | ||||
-rw-r--r-- | src/ephy-shell.c | 25 |
6 files changed, 127 insertions, 27 deletions
@@ -1,3 +1,16 @@ +2003-09-27 Marco Pesenti Gritti <marco@gnome.org> + + * embed/mozilla/ContentHandler.cpp: + * lib/ephy-gui.c: (make_mime_name), + (ephy_gui_get_pixbuf_from_mime_type): + * lib/ephy-gui.h: + * lib/widgets/ephy-spinner.c: (ephy_spinner_init), + (ephy_spinner_theme_changed), (ephy_spinner_load_images), + (ephy_spinner_finalize): + * src/ephy-shell.c: (ephy_shell_init): + + Use gtkicontheme, and use it also for mime icons. + 2003-09-26 Marco Pesenti Gritti <marco@gnome.org> * data/epiphany.schemas.in: diff --git a/embed/mozilla/ContentHandler.cpp b/embed/mozilla/ContentHandler.cpp index e1a571bce..49152e586 100644 --- a/embed/mozilla/ContentHandler.cpp +++ b/embed/mozilla/ContentHandler.cpp @@ -553,6 +553,7 @@ MimeAskActionDialog::MimeAskActionDialog(GContentHandler *aContentHandler, mContentHandler(aContentHandler), mParent(aParentWidget) { + GdkPixbuf *mime_icon; GtkWidget *label; GtkWidget *dialogWidget; const char *description; @@ -566,8 +567,9 @@ MimeAskActionDialog::MimeAskActionDialog(GContentHandler *aContentHandler, GtkWidget *aMimeIcon = glade_xml_get_widget (mGXml, "mime_ask_action_icon"); - gtk_image_set_from_file(GTK_IMAGE(aMimeIcon), - gnome_vfs_mime_get_icon(aMimeType)); + mime_icon = ephy_gui_get_pixbuf_from_mime_type (aMimeType, 32); + gtk_image_set_from_pixbuf (GTK_IMAGE(aMimeIcon), mime_icon); + g_object_unref (mime_icon); description = gnome_vfs_mime_get_description (aMimeType); if (!description) description = aMimeType; diff --git a/lib/ephy-gui.c b/lib/ephy-gui.c index 81077d140..af959b5aa 100644 --- a/lib/ephy-gui.c +++ b/lib/ephy-gui.c @@ -113,3 +113,75 @@ ephy_gui_help (GtkWindow *parent, g_error_free (err); } } + +#define ICON_NAME_MIME_PREFIX "gnome-mime-" + +static char * +make_mime_name (const char *mime_type) +{ + char *mime_type_without_slashes, *icon_name; + char *p; + + if (mime_type == NULL) + { + return NULL; + } + + mime_type_without_slashes = g_strdup (mime_type); + + while ((p = strchr(mime_type_without_slashes, '/')) != NULL) + *p = '-'; + + icon_name = g_strconcat (ICON_NAME_MIME_PREFIX, mime_type_without_slashes, NULL); + g_free (mime_type_without_slashes); + + return icon_name; +} + +GdkPixbuf * +ephy_gui_get_pixbuf_from_mime_type (const char *mime_type, + int size) +{ + GdkPixbuf *pixbuf; + GtkIconInfo *icon_info; + GtkIconTheme *icon_theme; + const char *icon; + char *icon_name; + + icon_name = make_mime_name (mime_type); + + icon_theme = gtk_icon_theme_get_default (); + g_return_val_if_fail (icon_theme != NULL, NULL); + + icon_info = gtk_icon_theme_lookup_icon + (icon_theme, icon_name, size, -1); + g_free (icon_name); + + /* try without specific size */ + if (icon_info == NULL) + { + icon_info = gtk_icon_theme_lookup_icon + (icon_theme, icon_name, -1, -1); + } + + /* no icon found */ + if (icon_info == NULL) return NULL; + + icon = gtk_icon_info_get_filename (icon_info); + pixbuf = gdk_pixbuf_new_from_file (icon, NULL); + g_return_val_if_fail (pixbuf != NULL, NULL); + + if (size != gtk_icon_info_get_base_size (icon_info)) + { + GdkPixbuf *tmp; + + tmp = gdk_pixbuf_scale_simple (pixbuf, size, size, + GDK_INTERP_BILINEAR); + g_object_unref (pixbuf); + pixbuf = tmp; + } + + gtk_icon_info_free (icon_info); + + return pixbuf; +} diff --git a/lib/ephy-gui.h b/lib/ephy-gui.h index ee2eeb155..17063388d 100644 --- a/lib/ephy-gui.h +++ b/lib/ephy-gui.h @@ -38,6 +38,9 @@ gboolean ephy_gui_confirm_overwrite_file (GtkWidget *parent, void ephy_gui_help (GtkWindow *parent, const char *file_name, const char *link_id); + +GdkPixbuf *ephy_gui_get_pixbuf_from_mime_type (const char *mime_type, + int size); G_END_DECLS #endif diff --git a/lib/widgets/ephy-spinner.c b/lib/widgets/ephy-spinner.c index 09c0c8529..2f4e9e3d9 100644 --- a/lib/widgets/ephy-spinner.c +++ b/lib/widgets/ephy-spinner.c @@ -37,7 +37,7 @@ #include "ephy-file-helpers.h" #include <gdk-pixbuf/gdk-pixbuf.h> -#include <libgnomeui/gnome-icon-theme.h> +#include <gtk/gtkicontheme.h> #define spinner_DEFAULT_TIMEOUT 100 /* Milliseconds Per Frame */ @@ -46,7 +46,7 @@ struct EphySpinnerDetails { GList *image_list; GdkPixbuf *quiescent_pixbuf; - GnomeIconTheme *icon_theme; + GtkIconTheme *icon_theme; int max_frame; int delay; @@ -62,7 +62,7 @@ static void ephy_spinner_init (EphySpinner *spinner); static void ephy_spinner_load_images (EphySpinner *spinner); static void ephy_spinner_unload_images (EphySpinner *spinner); static void ephy_spinner_remove_update_callback (EphySpinner *spinner); -static void ephy_spinner_theme_changed (GnomeIconTheme *icon_theme, +static void ephy_spinner_theme_changed (GtkIconTheme *icon_theme, EphySpinner *spinner); static GObjectClass *parent_class = NULL; @@ -178,7 +178,7 @@ ephy_spinner_init (EphySpinner *spinner) spinner->details = EPHY_SPINNER_GET_PRIVATE (spinner); spinner->details->delay = spinner_DEFAULT_TIMEOUT; - spinner->details->icon_theme = gnome_icon_theme_new (); + spinner->details->icon_theme = gtk_icon_theme_get_default (); g_signal_connect (spinner->details->icon_theme, "changed", G_CALLBACK (ephy_spinner_theme_changed), @@ -190,7 +190,7 @@ ephy_spinner_init (EphySpinner *spinner) /* handler for handling theme changes */ static void -ephy_spinner_theme_changed (GnomeIconTheme *icon_theme, EphySpinner *spinner) +ephy_spinner_theme_changed (GtkIconTheme *icon_theme, EphySpinner *spinner) { gtk_widget_hide (GTK_WIDGET (spinner)); ephy_spinner_load_images (spinner); @@ -417,20 +417,25 @@ static void ephy_spinner_load_images (EphySpinner *spinner) { int grid_width, grid_height, x, y, size; - char *icon; + const char *icon; GdkPixbuf *icon_pixbuf, *pixbuf; GList *image_list; + GtkIconInfo *icon_info; ephy_spinner_unload_images (spinner); /* Load the animation */ - icon = gnome_icon_theme_lookup_icon (spinner->details->icon_theme, - "gnome-spinner", -1, NULL, &size); - if (icon == NULL) { + icon_info = gtk_icon_theme_lookup_icon (spinner->details->icon_theme, + "gnome-spinner", -1, 0); + if (icon_info == NULL) { g_warning ("Throbber animation not found"); return; } + size = gtk_icon_info_get_base_size (icon_info); + icon = gtk_icon_info_get_filename (icon_info); + g_return_if_fail (icon_info != NULL); + icon_pixbuf = gdk_pixbuf_new_from_file (icon, NULL); grid_width = gdk_pixbuf_get_width (icon_pixbuf); grid_height = gdk_pixbuf_get_height (icon_pixbuf); @@ -453,22 +458,24 @@ ephy_spinner_load_images (EphySpinner *spinner) spinner->details->image_list = g_list_reverse (image_list); spinner->details->max_frame = g_list_length (spinner->details->image_list); - g_free (icon); + gtk_icon_info_free (icon_info); g_object_unref (icon_pixbuf); /* Load the rest icon */ - icon = gnome_icon_theme_lookup_icon (spinner->details->icon_theme, - "gnome-spinner-rest", -1, NULL, &size); + icon_info = gtk_icon_theme_lookup_icon (spinner->details->icon_theme, + "gnome-spinner-rest", -1, -1); if (icon == NULL) { g_warning ("Throbber rest icon not found"); return; } + size = gtk_icon_info_get_base_size (icon_info); + icon = gtk_icon_info_get_filename (icon_info); icon_pixbuf = gdk_pixbuf_new_from_file (icon, NULL); spinner->details->quiescent_pixbuf = scale_to_real_size (spinner, icon_pixbuf); g_object_unref (icon_pixbuf); - g_free (icon); + gtk_icon_info_free (icon_info); } /* @@ -513,8 +520,6 @@ ephy_spinner_finalize (GObject *object) ephy_spinner_remove_update_callback (spinner); ephy_spinner_unload_images (spinner); - g_object_unref (spinner->details->icon_theme); - G_OBJECT_CLASS (parent_class)->finalize (object); } diff --git a/src/ephy-shell.c b/src/ephy-shell.c index a1c72d89a..93041eadd 100644 --- a/src/ephy-shell.c +++ b/src/ephy-shell.c @@ -53,7 +53,7 @@ #include <gtk/gtkmessagedialog.h> #include <dirent.h> #include <libgnomevfs/gnome-vfs-init.h> -#include <libgnomeui/gnome-icon-theme.h> +#include <gtk/gtkicontheme.h> #include <glade/glade-init.h> #ifdef ENABLE_NAUTILUS_VIEW @@ -202,8 +202,9 @@ ephy_shell_init (EphyShell *gs) { EphyEmbedSingle *single; EphyShell **ptr = &ephy_shell; - GnomeIconTheme *icon_theme; - char *file; + GtkIconTheme *icon_theme; + GtkIconInfo *icon_info; + const char *icon_file; gs->priv = EPHY_SHELL_GET_PRIVATE (gs); @@ -257,15 +258,19 @@ ephy_shell_init (EphyShell *gs) ephy_shell_load_plugins (gs); - icon_theme = gnome_icon_theme_new (); - file = gnome_icon_theme_lookup_icon (icon_theme, "web-browser", - -1, NULL, NULL); - g_object_unref (icon_theme); + /* FIXME listen on icon changes */ + icon_theme = gtk_icon_theme_get_default (); + icon_info = gtk_icon_theme_lookup_icon (icon_theme, "web-browser", -1, -1); - if (file) + if (icon_info) { - gtk_window_set_default_icon_from_file (file, NULL); - g_free (file); + + icon_file = gtk_icon_info_get_filename (icon_info); + g_return_if_fail (icon_file != NULL); + + gtk_window_set_default_icon_from_file (icon_file, NULL); + + gtk_icon_info_free (icon_info); } else { |