Use GResource for icon files
authorColin Clark <colin.clark@cclark.uk>
Fri, 3 Mar 2023 16:44:55 +0000 (16:44 +0000)
committerColin Clark <colin.clark@cclark.uk>
Fri, 3 Mar 2023 16:44:55 +0000 (16:44 +0000)
59 files changed:
meson.build
src/collect-table.cc
src/icons/geeqie-logo.png [new file with mode: 0644]
src/icons/gq-archive-file.png [moved from src/icons/archive_file.png with 100% similarity]
src/icons/gq-collection.png [moved from src/icons/collection.png with 100% similarity]
src/icons/gq-folder-closed.png [moved from src/icons/folder_closed.png with 100% similarity]
src/icons/gq-folder-locked.png [moved from src/icons/folder_locked.png with 100% similarity]
src/icons/gq-folder-open.png [moved from src/icons/folder_open.png with 100% similarity]
src/icons/gq-folder-up.png [moved from src/icons/folder_up.png with 100% similarity]
src/icons/gq-icon-book.png [moved from src/icons/icon_book.png with 100% similarity]
src/icons/gq-icon-config.png [moved from src/icons/icon_config.png with 100% similarity]
src/icons/gq-icon-draw-rectangle.png [moved from src/icons/icon_draw_rectangle.png with 100% similarity]
src/icons/gq-icon-exif.png [moved from src/icons/icon_exif.png with 100% similarity]
src/icons/gq-icon-exposure.png [moved from src/icons/icon_exposure.png with 100% similarity]
src/icons/gq-icon-file-filter.png [moved from src/icons/icon_file_filter.png with 100% similarity]
src/icons/gq-icon-flip.png [moved from src/icons/icon_flip.png with 100% similarity]
src/icons/gq-icon-float.png [moved from src/icons/icon_float.png with 100% similarity]
src/icons/gq-icon-grayscale.png [moved from src/icons/icon_grayscale.png with 100% similarity]
src/icons/gq-icon-heic.png [moved from src/icons/icon_heic.png with 100% similarity]
src/icons/gq-icon-hidetools.png [moved from src/icons/icon_hidetools.png with 100% similarity]
src/icons/gq-icon-info.png [moved from src/icons/icon_info.png with 100% similarity]
src/icons/gq-icon-maintenance.png [moved from src/icons/icon_maintenance.png with 100% similarity]
src/icons/gq-icon-marks.png [moved from src/icons/icon_marks.png with 100% similarity]
src/icons/gq-icon-mirror.png [moved from src/icons/icon_mirror.png with 100% similarity]
src/icons/gq-icon-move.png [moved from src/icons/icon_move.png with 100% similarity]
src/icons/gq-icon-original.png [moved from src/icons/icon_original.png with 100% similarity]
src/icons/gq-icon-panorama.png [moved from src/icons/icon_panorama.png with 100% similarity]
src/icons/gq-icon-pdf.png [moved from src/icons/icon_pdf.png with 100% similarity]
src/icons/gq-icon-rename.png [new file with mode: 0644]
src/icons/gq-icon-rotate-180.png [moved from src/icons/icon_rotate_180.png with 100% similarity]
src/icons/gq-icon-rotate-clockwise.png [moved from src/icons/icon_rotate_clockwise.png with 100% similarity]
src/icons/gq-icon-rotate-counter-clockwise.png [moved from src/icons/icon_rotate_counter_clockwise.png with 100% similarity]
src/icons/gq-icon-select-all.png [moved from src/icons/icon_select_all.png with 100% similarity]
src/icons/gq-icon-select-invert.png [moved from src/icons/icon_select_invert.png with 100% similarity]
src/icons/gq-icon-select-none.png [moved from src/icons/icon_select_none.png with 100% similarity]
src/icons/gq-icon-select-rectangle.png [moved from src/icons/icon_select_rectangle.png with 100% similarity]
src/icons/gq-icon-sort.png [moved from src/icons/icon_sort.png with 100% similarity]
src/icons/gq-icon-split-pane-sync.png [moved from src/icons/icon_split_pane_sync.png with 100% similarity]
src/icons/gq-icon-thumb.png [moved from src/icons/icon_thumb.png with 100% similarity]
src/icons/gq-icon-tools.png [moved from src/icons/icon_tools.png with 100% similarity]
src/icons/gq-icon-trash.png [moved from src/icons/icon_trash.png with 100% similarity]
src/icons/gq-icon-view.png [moved from src/icons/icon_view.png with 100% similarity]
src/icons/gq-icon-zoomfillhor.png [moved from src/icons/icon_zoomfillhor.png with 100% similarity]
src/icons/gq-icon-zoomfillvert.png [moved from src/icons/icon_zoomfillvert.png with 100% similarity]
src/icons/gq-marker.xpm [moved from src/icons/marker.xpm with 100% similarity]
src/icons/gq-scroller.png [moved from src/icons/scroller.png with 100% similarity]
src/icons/gq-sheet-broken.png [moved from src/icons/sheet_broken.png with 100% similarity]
src/icons/gq-sheet-metadata.png [moved from src/icons/sheet_metadata.png with 100% similarity]
src/icons/gq-sheet-unknown.png [moved from src/icons/sheet_unknown.png with 100% similarity]
src/icons/gq-sheet-video.png [moved from src/icons/sheet_video.png with 100% similarity]
src/icons/gqview-icon.png [new file with mode: 0644]
src/icons/icon_rename.png [deleted file]
src/icons/icons.gresource.xml [new file with mode: 0644]
src/icons/meson.build
src/main.cc
src/main.h
src/pixbuf-renderer.cc
src/pixbuf-util.cc
src/pixbuf-util.h

index 653dc08..01137a7 100644 (file)
@@ -70,6 +70,7 @@ configuration_inc = include_directories('.')
 
 # External programs
 gdk_pixbuf_csource = find_program('gdk-pixbuf-csource', required : true)
+glib_compile_resources = find_program('glib-compile-resources', required : true)
 glib_genmarshal = find_program('glib-genmarshal', required : true)
 
 option = get_option('git')
index df01347..2307e6d 100644 (file)
 #include "uri-utils.h"
 #include "view-file.h"
 
-#include "icons/marker.xpm"
-#define MARKER_WIDTH 26
-#define MARKER_HEIGHT 32
-
 /* between these, the icon width is increased by thumb_max_width / 2 */
 #define THUMB_MIN_ICON_WIDTH 128
 #define THUMB_MAX_ICON_WIDTH 150
@@ -1480,6 +1476,10 @@ static void collection_table_insert_marker(CollectTable *ct, CollectInfo *info,
        GdkRectangle cell;
        GdkWindow *parent;
        gint x_parent, y_parent;
+       GError *error = NULL;
+       GInputStream *in_stream;
+       GdkPixbuf *pb;
+       gchar *path;
 
        parent = gtk_widget_get_window(gtk_widget_get_toplevel(ct->listview));
        gdk_window_get_position(parent, &x_parent, &y_parent);
@@ -1501,7 +1501,21 @@ static void collection_table_insert_marker(CollectTable *ct, CollectInfo *info,
                {
                GdkWindowAttr attributes;
                gint attributes_mask;
-               GdkPixbuf *pb = gdk_pixbuf_new_from_xpm_data((const gchar **)marker_xpm);
+
+               path = g_build_filename(GQ_RESOURCE_PATH_ICONS, "gq-marker.xpm", NULL);
+               in_stream = g_resources_open_stream(path, G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
+               g_free(path);
+
+               pb = gdk_pixbuf_new_from_stream(in_stream, NULL, &error);
+               g_object_unref(in_stream);
+
+               if (error)
+                       {
+                       log_printf("warning: collection marker error: %s", error->message);
+                       g_error_free(error);
+                       return;
+                       }
+
                gint w = gdk_pixbuf_get_width(pb);
                gint h = gdk_pixbuf_get_height(pb);
 
diff --git a/src/icons/geeqie-logo.png b/src/icons/geeqie-logo.png
new file mode 100644 (file)
index 0000000..db19b16
Binary files /dev/null and b/src/icons/geeqie-logo.png differ
diff --git a/src/icons/gq-icon-rename.png b/src/icons/gq-icon-rename.png
new file mode 100644 (file)
index 0000000..2c20090
Binary files /dev/null and b/src/icons/gq-icon-rename.png differ
similarity index 100%
rename from src/icons/marker.xpm
rename to src/icons/gq-marker.xpm
diff --git a/src/icons/gqview-icon.png b/src/icons/gqview-icon.png
new file mode 100644 (file)
index 0000000..1529f5d
Binary files /dev/null and b/src/icons/gqview-icon.png differ
diff --git a/src/icons/icon_rename.png b/src/icons/icon_rename.png
deleted file mode 100644 (file)
index 085c90f..0000000
Binary files a/src/icons/icon_rename.png and /dev/null differ
diff --git a/src/icons/icons.gresource.xml b/src/icons/icons.gresource.xml
new file mode 100644 (file)
index 0000000..545a0da
--- /dev/null
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ /*
+ * Copyright (C) 2008 - 2023 The Geeqie Team
+ *
+ * Author: Colin Clark
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+-->
+
+<gresources>
+  <gresource prefix="/org/geeqie/icons">
+    <file>geeqie-logo.png</file>
+    <file>gq-archive-file.png</file>
+    <file>gq-collection.png</file>
+    <file>gq-folder-closed.png</file>
+    <file>gq-folder-locked.png</file>
+    <file>gq-folder-open.png</file>
+    <file>gq-folder-up.png</file>
+    <file>gq-icon-book.png</file>
+    <file>gq-icon-config.png</file>
+    <file>gq-icon-draw-rectangle.png</file>
+    <file>gq-icon-exif.png</file>
+    <file>gq-icon-exposure.png</file>
+    <file>gq-icon-file-filter.png</file>
+    <file>gq-icon-flip.png</file>
+    <file>gq-icon-float.png</file>
+    <file>gq-icon-grayscale.png</file>
+    <file>gq-icon-heic.png</file>
+    <file>gq-icon-hidetools.png</file>
+    <file>gq-icon-info.png</file>
+    <file>gq-icon-maintenance.png</file>
+    <file>gq-icon-marks.png</file>
+    <file>gq-icon-mirror.png</file>
+    <file>gq-icon-move.png</file>
+    <file>gq-icon-original.png</file>
+    <file>gq-icon-panorama.png</file>
+    <file>gq-icon-pdf.png</file>
+    <file>gq-icon-rename.png</file>
+    <file>gq-icon-rotate-180.png</file>
+    <file>gq-icon-rotate-clockwise.png</file>
+    <file>gq-icon-rotate-counter-clockwise.png</file>
+    <file>gq-icon-select-all.png</file>
+    <file>gq-icon-select-invert.png</file>
+    <file>gq-icon-select-none.png</file>
+    <file>gq-icon-select-rectangle.png</file>
+    <file>gq-icon-sort.png</file>
+    <file>gq-icon-split-pane-sync.png</file>
+    <file>gq-icon-thumb.png</file>
+    <file>gq-icon-tools.png</file>
+    <file>gq-icon-trash.png</file>
+    <file>gq-icon-view.png</file>
+    <file>gq-icon-zoomfillhor.png</file>
+    <file>gq-icon-zoomfillvert.png</file>
+    <file>gq-scroller.png</file>
+    <file>gq-sheet-broken.png</file>
+    <file>gq-sheet-metadata.png</file>
+    <file>gq-sheet-unknown.png</file>
+    <file>gq-sheet-video.png</file>
+    <file>gqview-icon.png</file>
+    <file>gq-marker.xpm</file>
+  </gresource>
+</gresources>
index 55d7626..95d6770 100644 (file)
@@ -1,5 +1,5 @@
 # This file is a part of Geeqie project (https://www.geeqie.org/).
-# Copyright (C) 2008 - 2022 The Geeqie Team
+# Copyright (C) 2008 - 2023 The Geeqie Team
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 
-icons_inline_pairs = [
-'folder_closed', files('folder_closed.png'),
-'folder_locked', files('folder_locked.png'),
-'folder_open', files('folder_open.png'),
-'folder_up', files('folder_up.png'),
-'gqview_icon', files('gqview_icon.png'),
-'geeqie_logo', files('geeqie_logo.png'),
-'icon_float', files('icon_float.png'),
-'icon_thumb', files('icon_thumb.png'),
-'icon_scroller', files('scroller.png'),
-'icon_broken', files('sheet_broken.png'),
-'icon_archive', files('archive_file.png'),
-'icon_metadata', files('sheet_metadata.png'),
-'icon_unknown', files('sheet_unknown.png'),
-'icon_video', files('sheet_video.png'),
-'icon_collection', files('collection.png'),
-'icon_book', files('icon_book.png'),
-'icon_config', files('icon_config.png'),
-'icon_tools', files('icon_tools.png'),
-'icon_view', files('icon_view.png'),
-'icon_panorama', files('icon_panorama.png'),
-'icon_maintenance', files('icon_maintenance.png'),
-'icon_zoomfillhor', files('icon_zoomfillhor.png'),
-'icon_zoomfillvert', files('icon_zoomfillvert.png'),
-'icon_hidetools', files('icon_hidetools.png'),
-'icon_exif', files('icon_exif.png'),
-'icon_marks', files('icon_marks.png'),
-'icon_info', files('icon_info.png'),
-'icon_sort', files('icon_sort.png'),
-'icon_pdf', files('icon_pdf.png'),
-'icon_draw_rectangle', files('icon_draw_rectangle.png'),
-'icon_move', files('icon_move.png'),
-'icon_rename', files('icon_rename.png'),
-'icon_select_all', files('icon_select_all.png'),
-'icon_select_none', files('icon_select_none.png'),
-'icon_select_invert', files('icon_select_invert.png'),
-'icon_select_rectangle', files('icon_select_rectangle.png'),
-'icon_file_filter', files('icon_file_filter.png'),
-'icon_rotate_clockwise', files('icon_rotate_clockwise.png'),
-'icon_rotate_counter_clockwise', files('icon_rotate_counter_clockwise.png'),
-'icon_rotate_180', files('icon_rotate_180.png'),
-'icon_mirror', files('icon_mirror.png'),
-'icon_flip', files('icon_flip.png'),
-'icon_original', files('icon_original.png'),
-'icon_trash', files('icon_trash.png'),
-'icon_heic', files('icon_heic.png'),
-'icon_grayscale', files('icon_grayscale.png'),
-'icon_exposure', files('icon_exposure.png'),
-'icon_split_pane_sync', files('icon_split_pane_sync.png')
-]
+target_string = '--target=' + meson.current_build_dir() + '/icons.h'
+icons_resources_h = custom_target('icons_resources_h',
+                input : 'icons.gresource.xml',
+                output : 'icons.h',
+                command : [glib_compile_resources, '--generate-header', target_string, '--sourcedir=@CURRENT_SOURCE_DIR@', '@INPUT@'])
 
-icons_inline_h = custom_target('icons_inline', output : 'icons_inline.h',
-        command : [gdk_pixbuf_csource, '--raw', '--extern', '--build-list', icons_inline_pairs],
-        capture : true)
+target_string = '--target=' + meson.current_build_dir() + '/icons.c'
+icons_resources_c = custom_target('icons_resources_c',
+                input : 'icons.gresource.xml',
+                output : 'icons.c',
+                command : [glib_compile_resources, '--generate-source', target_string, '--sourcedir=@CURRENT_SOURCE_DIR@', '@INPUT@'])
 
-project_sources += icons_inline_h
+project_sources += icons_resources_h
+project_sources += icons_resources_c
 
 subdir('svg')
index 1c94866..70308a4 100644 (file)
@@ -1252,6 +1252,7 @@ gint main(gint argc, gchar *argv[])
                }
 
        DEBUG_1("%s main: pixbuf_inline_register_stock_icons", get_exec_time());
+       gtk_icon_theme_add_resource_path(gtk_icon_theme_get_default(), GQ_RESOURCE_PATH_ICONS);
        pixbuf_inline_register_stock_icons();
 
        DEBUG_1("%s main: setting default options before commandline handling", get_exec_time());
index a2e3dfb..ce9f5c8 100644 (file)
@@ -77,6 +77,7 @@
 #define GQ_TRASH_DIR           "trash"
 #define GQ_WINDOW_LAYOUTS_DIR  "layouts"
 #define GQ_ARCHIVE_DIR "geeqie-archive"
+#define GQ_RESOURCE_PATH_ICONS "/org/geeqie/icons"
 
 #define GQ_SYSTEM_WIDE_DIR    "/etc/" GQ_APPNAME_LC
 
index 3020f8f..34fe50a 100644 (file)
@@ -886,7 +886,12 @@ static void pr_scroller_start(PixbufRenderer *pr, gint x, gint y)
                gint w, h;
 
 #ifdef GQ_BUILD
-               pixbuf = pixbuf_inline(PIXBUF_INLINE_SCROLLER);
+               gchar *resource_path;
+
+               resource_path = g_build_filename(GQ_RESOURCE_PATH_ICONS, PIXBUF_INLINE_SCROLLER, ".png", NULL);
+
+               pixbuf = gdk_pixbuf_new_from_resource(resource_path, NULL);
+               g_free(resource_path);
 #else
                pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, 32, 32);
                gdk_pixbuf_fill(pixbuf, 0x000000ff);
index e17c45d..ea36da9 100644 (file)
@@ -24,8 +24,6 @@
 #include "exif.h"
 #include "ui-fileops.h"
 
-#include "icons/icons_inline.h"
-
 #include <math.h>
 
 
@@ -98,63 +96,67 @@ typedef struct _PixbufInline PixbufInline;
 struct _PixbufInline
 {
        const gchar *key;
-       const guint8 *data;
+       const gchar *data;
 };
 
 static PixbufInline inline_pixbuf_data[] = {
-       { PIXBUF_INLINE_FOLDER_CLOSED,  folder_closed },
-       { PIXBUF_INLINE_FOLDER_LOCKED,  folder_locked },
-       { PIXBUF_INLINE_FOLDER_OPEN,    folder_open },
-       { PIXBUF_INLINE_FOLDER_UP,      folder_up },
-       { PIXBUF_INLINE_SCROLLER,       icon_scroller },
-       { PIXBUF_INLINE_BROKEN,         icon_broken },
-       { PIXBUF_INLINE_METADATA,       icon_metadata },
-       { PIXBUF_INLINE_UNKNOWN,        icon_unknown },
-       { PIXBUF_INLINE_VIDEO,          icon_video },
-       { PIXBUF_INLINE_COLLECTION,     icon_collection },
-       { PIXBUF_INLINE_ICON,           gqview_icon },
-       { PIXBUF_INLINE_LOGO,           geeqie_logo },
-       { PIXBUF_INLINE_ARCHIVE,        icon_archive },
-       { PIXBUF_INLINE_ICON_FLOAT,     icon_float },
-       { PIXBUF_INLINE_ICON_THUMB,     icon_thumb },
-       { PIXBUF_INLINE_ICON_BOOK,      icon_book },
-       { PIXBUF_INLINE_ICON_CONFIG,    icon_config },
-       { PIXBUF_INLINE_ICON_TOOLS,     icon_tools },
-       { PIXBUF_INLINE_ICON_VIEW,      icon_view },
-       { PIXBUF_INLINE_ICON_PANORAMA,  icon_panorama },
-       { PIXBUF_INLINE_ICON_MAINTENANCE,       icon_maintenance },
-       { PIXBUF_INLINE_ICON_ZOOMFILLHOR,       icon_zoomfillhor },
-       { PIXBUF_INLINE_ICON_ZOOMFILLVERT,      icon_zoomfillvert },
-       { PIXBUF_INLINE_ICON_HIDETOOLS, icon_hidetools },
-       { PIXBUF_INLINE_ICON_EXIF,      icon_exif },
-       { PIXBUF_INLINE_ICON_MARKS,     icon_marks },
-       { PIXBUF_INLINE_ICON_INFO,      icon_info },
-       { PIXBUF_INLINE_ICON_SORT,      icon_sort },
-       { PIXBUF_INLINE_ICON_PDF,       icon_pdf },
-       { PIXBUF_INLINE_ICON_DRAW_RECTANGLE,    icon_draw_rectangle },
-       { PIXBUF_INLINE_ICON_MOVE,      icon_move },
-       { PIXBUF_INLINE_ICON_RENAME,    icon_rename },
-       { PIXBUF_INLINE_ICON_SELECT_ALL,        icon_select_all },
-       { PIXBUF_INLINE_ICON_SELECT_NONE,       icon_select_none },
-       { PIXBUF_INLINE_ICON_SELECT_INVERT,     icon_select_invert },
-       { PIXBUF_INLINE_ICON_SELECT_RECTANGLE,  icon_select_rectangle },
-       { PIXBUF_INLINE_ICON_FILE_FILTER,       icon_file_filter },
-       { PIXBUF_INLINE_ICON_CW,        icon_rotate_clockwise },
-       { PIXBUF_INLINE_ICON_CCW,       icon_rotate_counter_clockwise },
-       { PIXBUF_INLINE_ICON_180,       icon_rotate_180 },
-       { PIXBUF_INLINE_ICON_MIRROR,    icon_mirror },
-       { PIXBUF_INLINE_ICON_FLIP,      icon_flip },
-       { PIXBUF_INLINE_ICON_ORIGINAL,  icon_original },
-       { PIXBUF_INLINE_ICON_TRASH,     icon_trash },
-       { PIXBUF_INLINE_ICON_HEIF,      icon_heic },
-       { PIXBUF_INLINE_ICON_GRAYSCALE, icon_grayscale },
-       { PIXBUF_INLINE_ICON_EXPOSURE,  icon_exposure },
-       { PIXBUF_INLINE_SPLIT_PANE_SYNC, icon_split_pane_sync },
+       { PIXBUF_INLINE_ARCHIVE,        "gq-archive-file.png" },
+       { PIXBUF_INLINE_BROKEN, "gq-sheet-broken.png" },
+       { PIXBUF_INLINE_COLLECTION,     "gq-collection.png" },
+       { PIXBUF_INLINE_FOLDER_CLOSED,  "gq-folder-closed.png" },
+       { PIXBUF_INLINE_FOLDER_LOCKED,  "gq-folder-locked.png" },
+       { PIXBUF_INLINE_FOLDER_OPEN,    "gq-folder-open.png" },
+       { PIXBUF_INLINE_FOLDER_UP,      "gq-folder-up.png" },
+       { PIXBUF_INLINE_ICON,   "gqview-icon.png" },
+       { PIXBUF_INLINE_ICON_180,       "gq-icon-rotate-180.png" },
+       { PIXBUF_INLINE_ICON_BOOK,      "gq-icon-book.png" },
+       { PIXBUF_INLINE_ICON_CCW,       "gq-icon-rotate-counter-clockwise.png" },
+       { PIXBUF_INLINE_ICON_CONFIG,    "gq-icon-config.png" },
+       { PIXBUF_INLINE_ICON_CW,        "gq-icon-rotate-clockwise.png" },
+       { PIXBUF_INLINE_ICON_DRAW_RECTANGLE,    "gq-icon-draw-rectangle.png" },
+       { PIXBUF_INLINE_ICON_EXIF,      "gq-icon-exif.png" },
+       { PIXBUF_INLINE_ICON_EXPOSURE,  "gq-icon-exposure.png" },
+       { PIXBUF_INLINE_ICON_FILE_FILTER,       "gq-icon-file-filter.png" },
+       { PIXBUF_INLINE_ICON_FLIP,      "gq-icon-flip.png" },
+       { PIXBUF_INLINE_ICON_FLOAT,     "gq-icon-float.png" },
+       { PIXBUF_INLINE_ICON_GRAYSCALE, "gq-icon-grayscale.png" },
+       { PIXBUF_INLINE_ICON_HEIF,      "gq-icon-heic.png" },
+       { PIXBUF_INLINE_ICON_HIDETOOLS,         "gq-icon-hidetools.png" },
+       { PIXBUF_INLINE_ICON_INFO,      "gq-icon-info.png" },
+       { PIXBUF_INLINE_ICON_MAINTENANCE,       "gq-icon-maintenance.png" },
+       { PIXBUF_INLINE_ICON_MARKS,     "gq-icon-marks.png" },
+       { PIXBUF_INLINE_ICON_MIRROR,    "gq-icon-mirror.png" },
+       { PIXBUF_INLINE_ICON_MOVE,      "gq-icon-move.png" },
+       { PIXBUF_INLINE_ICON_ORIGINAL,  "gq-icon-original.png" },
+       { PIXBUF_INLINE_ICON_PANORAMA,  "gq-icon-panorama.png" },
+       { PIXBUF_INLINE_ICON_PDF,       "gq-icon-pdf.png" },
+       { PIXBUF_INLINE_ICON_RENAME,    "gq-icon-rename.png" },
+       { PIXBUF_INLINE_ICON_SELECT_ALL,        "gq-icon-select-all.png" },
+       { PIXBUF_INLINE_ICON_SELECT_INVERT,     "gq-icon-select-invert.png" },
+       { PIXBUF_INLINE_ICON_SELECT_NONE,       "gq-icon-select-none.png" },
+       { PIXBUF_INLINE_ICON_SELECT_RECTANGLE,  "gq-icon-select-rectangle.png" },
+       { PIXBUF_INLINE_ICON_SORT,      "gq-icon-sort.png" },
+       { PIXBUF_INLINE_ICON_THUMB,     "gq-icon-thumb.png" },
+       { PIXBUF_INLINE_ICON_TOOLS,             "gq-icon-tools.png" },
+       { PIXBUF_INLINE_ICON_TRASH,     "gq-icon-trash.png" },
+       { PIXBUF_INLINE_ICON_VIEW,      "gq-icon-view.png" },
+       { PIXBUF_INLINE_ICON_ZOOMFILLHOR,       "gq-icon-zoomfillhor.png" },
+       { PIXBUF_INLINE_ICON_ZOOMFILLVERT,      "gq-icon-zoomfillvert.png" },
+       { PIXBUF_INLINE_LOGO,   "geeqie-logo.png" },
+       { PIXBUF_INLINE_METADATA,       "gq-sheet-metadata.png" },
+       { PIXBUF_INLINE_SCROLLER,       "gq-scroller.png" },
+       { PIXBUF_INLINE_SPLIT_PANE_SYNC, "gq-icon-split-pane-sync.png" },
+       { PIXBUF_INLINE_UNKNOWN,        "gq-sheet-unknown.png" },
+       { PIXBUF_INLINE_VIDEO,  "gq-sheet-video.png" },
        { NULL, NULL }
 };
 
 GdkPixbuf *pixbuf_inline(const gchar *key)
 {
+       GError *error = NULL;
+       GInputStream *in_stream;
+       GdkPixbuf *icon_pixbuf;
+       gchar *path;
        gint i;
 
        if (!key) return NULL;
@@ -164,7 +166,30 @@ GdkPixbuf *pixbuf_inline(const gchar *key)
                {
                if (strcmp(inline_pixbuf_data[i].key, key) == 0)
                        {
-                       return gdk_pixbuf_new_from_inline(-1, inline_pixbuf_data[i].data, FALSE, NULL);
+                       path = g_build_filename(GQ_RESOURCE_PATH_ICONS, inline_pixbuf_data[i].data, NULL);
+
+                       in_stream = g_resources_open_stream(path, G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
+                       g_free(path);
+
+                       if (error)
+                               {
+                               log_printf("warning: inline pixbuf error: %s", error->message);
+                               g_error_free(error);
+                               g_object_unref(in_stream);
+                               return NULL;
+                               }
+
+                       icon_pixbuf = gdk_pixbuf_new_from_stream(in_stream, NULL, &error);
+                       g_object_unref(in_stream);
+
+                       if (error)
+                               {
+                               log_printf("warning: inline pixbuf error: %s", error->message);
+                               g_error_free(error);
+                               return NULL;
+                               }
+
+                       return icon_pixbuf;
                        }
                i++;
                }
index 8450834..0e787cd 100644 (file)
@@ -34,57 +34,54 @@ GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_he
 
 gboolean pixbuf_scale_aspect(gint req_w, gint req_h, gint old_w, gint old_h, gint *new_w, gint *new_h);
 
-#define PIXBUF_INLINE_FOLDER_CLOSED    "folder_closed"
-#define PIXBUF_INLINE_FOLDER_LOCKED    "folder_locked"
-#define PIXBUF_INLINE_FOLDER_OPEN      "folder_open"
-#define PIXBUF_INLINE_FOLDER_UP                "folder_up"
-#define PIXBUF_INLINE_SCROLLER         "scroller"
-#define PIXBUF_INLINE_BROKEN           "broken"
-#define PIXBUF_INLINE_METADATA         "metadata"
-#define PIXBUF_INLINE_UNKNOWN          "unknown"
-#define PIXBUF_INLINE_VIDEO                    "video"
-#define PIXBUF_INLINE_COLLECTION       "collection"
-#define PIXBUF_INLINE_ICON             "icon"
-#define PIXBUF_INLINE_LOGO             "logo"
-#define PIXBUF_INLINE_ARCHIVE          "archive"
-
-#define PIXBUF_INLINE_ICON_FLOAT       "icon_float"
-#define PIXBUF_INLINE_ICON_THUMB       "icon_thumb"
-
-#define PIXBUF_INLINE_ICON_BOOK                "icon_book"
-#define PIXBUF_INLINE_ICON_CONFIG      "icon_config"
-#define PIXBUF_INLINE_ICON_TOOLS       "icon_tools"
-#define PIXBUF_INLINE_ICON_VIEW                "icon_view"
-#define PIXBUF_INLINE_ICON_PANORAMA            "icon_panorama"
-#define PIXBUF_INLINE_ICON_MAINTENANCE "icon_maintenance"
-#define PIXBUF_INLINE_ICON_ZOOMFILLHOR "icon_zoomfillhor"
-#define PIXBUF_INLINE_ICON_ZOOMFILLVERT        "icon_zoomfillvert"
-#define PIXBUF_INLINE_ICON_HIDETOOLS   "icon_hidetools"
-#define PIXBUF_INLINE_ICON_EXIF                "icon_exif"
-#define PIXBUF_INLINE_ICON_MARKS       "icon_marks"
-#define PIXBUF_INLINE_ICON_INFO                "icon_info"
-#define PIXBUF_INLINE_ICON_SORT                "icon_sort"
-#define PIXBUF_INLINE_ICON_PDF         "icon_pdf"
-#define PIXBUF_INLINE_ICON_DRAW_RECTANGLE      "icon_draw_rectangle"
-#define PIXBUF_INLINE_ICON_MOVE                "icon_move"
-#define PIXBUF_INLINE_ICON_RENAME      "icon_rename"
-#define PIXBUF_INLINE_ICON_SELECT_ALL  "icon_select_all"
-#define PIXBUF_INLINE_ICON_SELECT_NONE "icon_select_none"
-#define PIXBUF_INLINE_ICON_SELECT_INVERT       "icon_select_invert"
-#define PIXBUF_INLINE_ICON_SELECT_RECTANGLE    "icon_select_rectangle"
-#define PIXBUF_INLINE_ICON_FILE_FILTER "icon_file_filter"
-#define PIXBUF_INLINE_ICON_TRASH       "icon_trash"
-#define PIXBUF_INLINE_ICON_HEIF        "icon_heic"
-#define PIXBUF_INLINE_ICON_GRAYSCALE   "icon_grayscale"
-#define PIXBUF_INLINE_ICON_EXPOSURE            "icon_exposure"
-#define PIXBUF_INLINE_SPLIT_PANE_SYNC  "icon_split_pane_sync"
-
-#define PIXBUF_INLINE_ICON_CW  "icon_rotate_clockwise"
-#define PIXBUF_INLINE_ICON_CCW "icon_rotate_counter_clockwise"
-#define PIXBUF_INLINE_ICON_180 "icon_rotate_180"
-#define PIXBUF_INLINE_ICON_MIRROR      "icon_mirror"
-#define PIXBUF_INLINE_ICON_FLIP        "icon_flip"
-#define PIXBUF_INLINE_ICON_ORIGINAL    "icon_original"
+#define PIXBUF_INLINE_ARCHIVE          "gq-archive-file"
+#define PIXBUF_INLINE_BROKEN           "gq-sheet-broken"
+#define PIXBUF_INLINE_COLLECTION       "gq-collection"
+#define PIXBUF_INLINE_FOLDER_CLOSED    "gq-folder-closed"
+#define PIXBUF_INLINE_FOLDER_LOCKED    "gq-folder-locked"
+#define PIXBUF_INLINE_FOLDER_OPEN      "gq-folder-open"
+#define PIXBUF_INLINE_FOLDER_UP                "gq-folder-up"
+#define PIXBUF_INLINE_ICON             "gqview-icon"
+#define PIXBUF_INLINE_ICON_180 "gq-icon-rotate-180"
+#define PIXBUF_INLINE_ICON_BOOK                "gq-icon-book"
+#define PIXBUF_INLINE_ICON_CCW "gq-icon-rotate-counter-clockwise"
+#define PIXBUF_INLINE_ICON_CONFIG      "gq-icon-config"
+#define PIXBUF_INLINE_ICON_CW  "gq-icon-rotate-clockwise"
+#define PIXBUF_INLINE_ICON_DRAW_RECTANGLE      "gq-icon-draw-rectangle"
+#define PIXBUF_INLINE_ICON_EXIF                "gq-icon-exif"
+#define PIXBUF_INLINE_ICON_EXPOSURE            "gq-icon-exposure"
+#define PIXBUF_INLINE_ICON_FILE_FILTER "gq-icon-file-filter"
+#define PIXBUF_INLINE_ICON_FLIP                "gq-icon-flip"
+#define PIXBUF_INLINE_ICON_FLOAT       "gq-icon-float"
+#define PIXBUF_INLINE_ICON_GRAYSCALE   "gq-icon-grayscale"
+#define PIXBUF_INLINE_ICON_HEIF                "gq-icon-heic"
+#define PIXBUF_INLINE_ICON_HIDETOOLS   "gq-icon-hidetools"
+#define PIXBUF_INLINE_ICON_INFO                "gq-icon-info"
+#define PIXBUF_INLINE_ICON_MAINTENANCE "gq-icon-maintenance"
+#define PIXBUF_INLINE_ICON_MARKS       "gq-icon-marks"
+#define PIXBUF_INLINE_ICON_MIRROR      "gq-icon-mirror"
+#define PIXBUF_INLINE_ICON_MOVE                "gq-icon-move"
+#define PIXBUF_INLINE_ICON_ORIGINAL    "gq-icon-original"
+#define PIXBUF_INLINE_ICON_PANORAMA            "gq-icon-panorama"
+#define PIXBUF_INLINE_ICON_PDF         "gq-icon-pdf"
+#define PIXBUF_INLINE_ICON_RENAME      "gq-icon-rename"
+#define PIXBUF_INLINE_ICON_SELECT_ALL  "gq-icon-select-all"
+#define PIXBUF_INLINE_ICON_SELECT_INVERT       "gq-icon-select-invert"
+#define PIXBUF_INLINE_ICON_SELECT_NONE "gq-icon-select-none"
+#define PIXBUF_INLINE_ICON_SELECT_RECTANGLE    "gq-icon-select-rectangle"
+#define PIXBUF_INLINE_ICON_SORT                "gq-icon-sort"
+#define PIXBUF_INLINE_ICON_THUMB       "gq-icon-thumb"
+#define PIXBUF_INLINE_ICON_TOOLS       "gq-icon-tools"
+#define PIXBUF_INLINE_ICON_TRASH       "gq-icon-trash"
+#define PIXBUF_INLINE_ICON_VIEW                "gq-icon-view"
+#define PIXBUF_INLINE_ICON_ZOOMFILLHOR "gq-icon-zoomfillhor"
+#define PIXBUF_INLINE_ICON_ZOOMFILLVERT        "gq-icon-zoomfillvert"
+#define PIXBUF_INLINE_LOGO             "geeqie-logo"
+#define PIXBUF_INLINE_METADATA         "gq-sheet-metadata"
+#define PIXBUF_INLINE_SCROLLER         "gq-scroller"
+#define PIXBUF_INLINE_SPLIT_PANE_SYNC  "gq-icon-split-pane-sync"
+#define PIXBUF_INLINE_UNKNOWN          "gq-sheet-unknown"
+#define PIXBUF_INLINE_VIDEO                    "gq-sheet-video"
 
 GdkPixbuf *pixbuf_copy_rotate_90(GdkPixbuf *src, gboolean counter_clockwise);
 GdkPixbuf *pixbuf_copy_mirror(GdkPixbuf *src, gboolean mirror, gboolean flip);