[sushi/wip/cosimoc/no-clutter: 21/50] fallbackRenderer: rework how the file icon is set
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sushi/wip/cosimoc/no-clutter: 21/50] fallbackRenderer: rework how the file icon is set
- Date: Mon, 17 Jun 2019 18:34:22 +0000 (UTC)
commit b01f6dbeb4442f16318aa7935868b91932edd906
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Sun Apr 29 16:46:13 2018 -0700
fallbackRenderer: rework how the file icon is set
Instead of loading a pixbuf through the C library, return directly the
GIcon from there. That simplifies things, and allows GtkImage to
automatically do HiDpi handling for us.
src/js/ui/fallbackRenderer.js | 21 ++++++++++++++++++---
src/libsushi/sushi-file-loader.c | 36 +++++-------------------------------
src/libsushi/sushi-file-loader.h | 3 +--
3 files changed, 24 insertions(+), 36 deletions(-)
---
diff --git a/src/js/ui/fallbackRenderer.js b/src/js/ui/fallbackRenderer.js
index 0f2d84e..f95b8f9 100644
--- a/src/js/ui/fallbackRenderer.js
+++ b/src/js/ui/fallbackRenderer.js
@@ -58,9 +58,9 @@ var FallbackRenderer = new Lang.Class({
this._box = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL,
spacing: 6 });
- this._image = new Gtk.Image({ icon_name: 'document',
- pixel_size: 256 });
+ this._image = new Gtk.Image();
this._box.pack_start(this._image, false, false, 0);
+ this._updateIcon(new Gio.ThemedIcon({ name: 'text-x-generic' }));
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL,
spacing: 1,
@@ -135,6 +135,21 @@ var FallbackRenderer = new Lang.Class({
this._dateLabel.set_markup(dateStr);
},
+ _updateIcon: function(icon) {
+ let iconTheme = Gtk.IconTheme.get_default();
+ let iconInfo = iconTheme.lookup_by_gicon_for_scale(icon, 256,
+ this._image.scale_factor, 0);
+ if (!iconInfo)
+ return;
+
+ try {
+ let surface = iconInfo.load_surface(this._image.get_window());
+ this._image.surface = surface;
+ } catch (e) {
+ logError(e, `Error loading surface for icon ${icon.to_string()}`);
+ }
+ },
+
_onFileInfoChanged : function() {
if (!this._fileLoader.get_loading()) {
this._spinner.stop();
@@ -142,7 +157,7 @@ var FallbackRenderer = new Lang.Class({
}
if (this._fileLoader.icon)
- this._image.set_from_pixbuf(this._fileLoader.icon);
+ this._updateIcon(this._fileLoader.icon);
this._applyLabels();
this._mainWindow.refreshSize();
diff --git a/src/libsushi/sushi-file-loader.c b/src/libsushi/sushi-file-loader.c
index a88d9c3..5602384 100644
--- a/src/libsushi/sushi-file-loader.c
+++ b/src/libsushi/sushi-file-loader.c
@@ -435,7 +435,7 @@ sushi_file_loader_get_property (GObject *object,
g_value_take_string (value, sushi_file_loader_get_date_string (self));
break;
case PROP_ICON:
- g_value_take_object (value, sushi_file_loader_get_icon (self));
+ g_value_set_object (value, sushi_file_loader_get_icon (self));
break;
case PROP_FILE:
g_value_set_object (value, self->priv->file);
@@ -521,7 +521,7 @@ sushi_file_loader_class_init (SushiFileLoaderClass *klass)
g_param_spec_object ("icon",
"Icon",
"The icon of the file",
- GDK_TYPE_PIXBUF,
+ G_TYPE_ICON,
G_PARAM_READABLE);
g_type_class_add_private (klass, sizeof (SushiFileLoaderPrivate));
@@ -567,41 +567,15 @@ sushi_file_loader_get_display_name (SushiFileLoader *self)
* sushi_file_loader_get_icon:
* @self:
*
- * Returns: (transfer full):
+ * Returns: (transfer none):
*/
-GdkPixbuf *
+GIcon *
sushi_file_loader_get_icon (SushiFileLoader *self)
{
- GdkPixbuf *retval;
- GtkIconInfo *info;
- GError *error = NULL;
-
if (self->priv->info == NULL)
return NULL;
- info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (),
- g_file_info_get_icon (self->priv->info),
- 256, 0);
-
- if (info == NULL)
- return NULL;
-
- retval = gtk_icon_info_load_icon (info, &error);
- g_object_unref (info);
-
- if (error != NULL) {
- gchar *uri;
-
- uri = g_file_get_uri (self->priv->file);
- g_warning ("Unable to load icon for %s: %s", uri, error->message);
-
- g_free (uri);
- g_error_free (error);
-
- return NULL;
- }
-
- return retval;
+ return g_file_info_get_icon (self->priv->info);
}
/**
diff --git a/src/libsushi/sushi-file-loader.h b/src/libsushi/sushi-file-loader.h
index 7a724f9..b883a5c 100644
--- a/src/libsushi/sushi-file-loader.h
+++ b/src/libsushi/sushi-file-loader.h
@@ -28,7 +28,6 @@
#include <glib-object.h>
#include <gio/gio.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
G_BEGIN_DECLS
@@ -63,7 +62,7 @@ gchar *sushi_file_loader_get_display_name (SushiFileLoader *self);
gchar *sushi_file_loader_get_size_string (SushiFileLoader *self);
gchar *sushi_file_loader_get_date_string (SushiFileLoader *self);
gchar *sushi_file_loader_get_content_type_string (SushiFileLoader *self);
-GdkPixbuf *sushi_file_loader_get_icon (SushiFileLoader *self);
+GIcon *sushi_file_loader_get_icon (SushiFileLoader *self);
GFileType sushi_file_loader_get_file_type (SushiFileLoader *self);
gboolean sushi_file_loader_get_loading (SushiFileLoader *self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]