Commit graph gtk2-ng/gtk/gtkiconcache.c
Author SHA1 Message Date
42a31c8576 Clean up trailing whitespace 2026-05-03 15:16:52 +02:00
a7e6c6e18b Replace deprecated pixdata deserialization in icon cache
Replace gdk_pixdata_deserialize() in the icon cache reader and
validator with a small parser for the RAW GdkPixdata stream produced by
gtk-update-icon-cache.

Keep the existing icon-theme.cache format and continue creating pixbufs
directly from the mapped cache data, avoiding extra pixel copies or new
runtime dependencies. Intentionally accept only raw 8-bit RGB/RGBA
pixdata, matching the cache format produced by gtk-update-icon-cache.
2026-04-28 09:49:03 +02:00
932bc82675 Fix compiler warnings and deprecated API usage 2026-04-24 15:29:59 +02:00
d77875c0af Y2038 safety: internal timestamp modernization 2026-04-23 10:18:55 +02:00
Chun-wei Fan
4612f0b3fe gtk/gtkiconcache.c: Fix running on GLib-2.57.3 or later on Windows
In GLib-2.57.3 and later, GStatBuf may not be a struct stat on Windows,
depending on the architecture and the compiler used, so we can't just
call fstat() on the GStatBuf.

Instead, we need to use the correct CRT function to call on the
GStatBuf, which is as follows:

-_fstat32() for Windows 32-bit builds on mingw-w64 and MSVC
-_fstat64() for Windows 64-bit builds on mingw-w64
-stat() for Windows 64-bit builds on MSVC, and on all other platforms.
2018-12-21 13:40:05 +08:00
Eduard Braun
303858fa76 Consistently use g_stat and GStatBuf
Replace "stat struct" with "GStatBuf" and "stat" with "g_stat" where
appropriate to fix cross-platform issues, specifically on Windows.

Code should be identical on *nix but fixes some serious issues
on Windows:
- Field widths of "struct stat" are not constant on Windows.
  If the stat function does not match the stat struct used
  it will cause overwrites and undefined behavior
- The Windows stat function needs a properly encoded filename.
  In many places we pass an UTF-8 encoded value which breaks as soon
  as non-ASCII characters are involved.

https://bugzilla.gnome.org/show_bug.cgi?id=787772
2018-08-19 14:53:15 +02:00
Matthias Clasen
e7a1afc74d Fix the build against current gdk-pixbuf
The GdkPixdata APIs have been deprecated, lets not fail the build
due to that.
2016-03-05 10:59:55 -05:00
Ryan Lortie
6fe357965a Use g_mapped_file_unref()
- drop deprecated use of g_mapped_file_free()
  - bump glib version requirement
2009-06-18 15:11:57 -04:00
Johan Dahlin
d97cdbdf53 Include "config.h" instead of <config.h> Command used: find -name
2008-06-21  Johan Dahlin  <jdahlin@async.com.br>

    * *.[ch]: Include "config.h" instead of <config.h>
    Command used:
    find -name \*.[ch]|xargs perl -p -i -e 's/^#include <config.h>/#include "config.h"/g'
    Rubberstamped by Mitch and Tim


svn path=/trunk/; revision=20669
2008-06-22 14:28:52 +00:00
Michael Natterer
824e2c74bb remove unused variable.
2008-01-14  Michael Natterer  <mitch@imendio.com>

	* gtk/gtkiconcache.c (find_image_offset): remove unused variable.


svn path=/trunk/; revision=19367
2008-01-14 14:19:21 +00:00
Matthias Clasen
f9e4618bda Two optimizations for icon cache lookups.
2007-12-03  Matthias Clasen  <mclasen@redhat.com>

        Two optimizations for icon cache lookups.

        * gtk/gtkiconcache.[hc]:
        * gtk/gtkicontheme.c: Remember the directory index for
        subdirectories, instead of running over the directory list
        again and again.

        * gtk/gtkiconcache.c (find_image_offset): Remember the last
        chain and try it first; this helps with the the usage patterns
        in gtkicontheme.c, where the same icon is queried for a lot
        of subdirectories.


svn path=/trunk/; revision=19099
2007-12-03 17:44:27 +00:00
Matthias Clasen
5f8cd8b9fb Turn off icon cache validation by default
svn path=/trunk/; revision=18823
2007-09-14 02:11:01 +00:00
Yevgen Muntyan
1a534510aa missing #include <ctype.h>.
2007-05-23  Yevgen Muntyan  <muntyan@tamu.edu>

	* gtk/gtkprintunixdialog.c: missing #include <ctype.h>.

	* gtk/gtkhandlebox.c (gtk_handle_box_paint):
	* gtk/gtkpagesetupunixdialog.c (_gtk_load_custom_papers):
	* gtk/gtkstatusbar.c (gtk_statusbar_get_context_id):
	* gtk/gtkiconcache.c (_gtk_icon_cache_new_for_path):
	* gtk/gtktrayicon-x11.c (gtk_tray_icon_send_dock_request):
	* gtk/gtkpreview.c (gtk_preview_finalize):
	* gtk/gtknotebook.c (gtk_notebook_set_group_id):
	* tests/testnotebookdnd.c (window_creation_function):
	* tests/testiconview.c (do_popup_menu):
	Fixed some compiler warnings (#440689).

svn path=/trunk/; revision=17898
2007-05-23 15:06:03 +00:00
Matthias Clasen
a5cbbdef91 Remove debug spew
svn path=/trunk/; revision=17756
2007-05-01 22:01:16 +00:00
Matthias Clasen
2a80113304 Add an icon cache validator.
2007-05-01  Matthias Clasen  <mclasen@redhat.com>

        * gtk/gtkiconcachvalidator.[hc]: Add an icon cache validator.

        * gtk/updateiconcache.c: Validate the generated cache before
        moving it in place. Also add a --validate option to validate
        an existing icon cache.

        * gtk/gtkiconcache.c: Validate icon caches before using them.

        * gtk/Makefile.am: Integrate it.


svn path=/trunk/; revision=17753
2007-05-01 20:00:17 +00:00
Matthias Clasen
07e7719441 Apply a cleanup patch by Kjartan Maraas (#341812)
2006-10-08  Matthias Clasen  <mclasen@redhat.com>

	* Apply a cleanup patch by Kjartan Maraas  (#341812)
2006-10-08 05:07:55 +00:00
Matthias Clasen
f45a35921a Commit a patch by Behdad to fix typos, omissions and other errors in the
2006-09-10  Matthias Clasen  <mclasen@redhat.com>

        * Commit a patch by Behdad to fix typos, omissions and other
        errors in the symbol aliasing, and add checks for local PLT
        entries.  (#354687, Behdad Esfahbod)
2006-09-10 06:39:16 +00:00
Matthias Clasen
082d4176d5 Don't leak the keyfile parser in the error case.
2006-03-31  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkicontheme.c (load_icon_data): Don't leak the keyfile
	parser in the error case.

	* gtk/gtkicontheme.c (load_icon_data, free_unthemed_icon)
	(icon_data_free, load_themes):
	* gtk/gtkiconcache.c (_gtk_icon_cache_get_icon_data): Use the slice
	allocator for GtkIconData and UnthemedIcon structs.
2006-03-31 05:17:56 +00:00
Matthias Clasen
b983d1c6a7 Store builtin stock icons in an icon cache, instead of populating a hash
2005-11-04  Matthias Clasen  <mclasen@redhat.com>

        Store builtin stock icons in an icon cache, instead of
        populating a hash table with pixbufs at startup, to save both
        memory and startup time.

        * gtk/stock-icons/*: Reorganize the icons in a directory structure
        suitable for gtk-update-icon-cache, and rename them to match the
        stock ids.

        * gtk/gtkiconcache.[hc]: Support non-mmapped icon caches, and
        add _gtk_icon_cache_has_icon_in_directory().

        * gtk/updateiconcache.c: Support a --source <VARIABLE> argument
        to store the contents of the icon cache in a C header.

        * gtk/gtkbuiltincache.h: Generated private header which contains
        the icon cache for the builtin icons.

        * gtk/gtkicontheme.c: Create a GtkIconCache for the builtin
        icons, and use that in addition to the hash table whenever
        builtin icons are searched.

        * gtk/gtkiconfactory.c: Add GTK_ICON_SOURCE_STATIC_ICON_NAME and
        use it for static stock ids.
        (get_default_icons): Don't add the builtin
        icons to the icon theme, just register the stock ids.
        (render_fallback_image): Take the fallback image out of the
        builtin icon cache.

        * gtk/Makefile.am: Remove stock-icons from SUBDIRS and add
        the necessary machinery to rebuild gtkbuiltincache.h.
2005-11-04 15:43:40 +00:00
Matthias Clasen
97ef14b224 Remove an accidentally leftover duplicate pixbuf creation. (#314700,
2005-08-29  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkiconcache.c (_gtk_icon_cache_get_icon): Remove an
	accidentally leftover duplicate pixbuf creation.  (#314700,
	Kjartan Maraas)
2005-08-29 05:06:18 +00:00
Matthias Clasen
97ec1cdf4f Add a note regarding icon theme changes.
2005-08-22  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkicontheme.c (gtk_icon_theme_load_icon): Add a note
	regarding icon theme changes.

	* gtk/gtkiconcache.c (_gtk_icon_cache_get_icon): When returning
	pixbufs which are backed by the mmapped memory of an icon cache,
	increase the refcount of the icon cache, so that the memory is not
	munmapped away underneath the pixbuf upon icon theme changes.
	(#314170, Kjartan Maraas)
2005-08-22 16:38:46 +00:00
Hans Breuer
19e9165d64 updated <io.h> for open() use G_PI instead of M_PI
2005-07-03  Hans Breuer  <hans@breuer.org>

	* **/makefile.msc[.in] : updated
	* gtk/gtkiconcache.c : <io.h> for open()
	* gtk/gtkstyle.c : use G_PI instead of M_PI

	* gdk/win32/gdkcursor-win32.c : implement gdk_cursor_new_from_name()
	by mapping the lower case win32 api name to the respective cursor.
	E.g. pass "wait" to get the IDC_WAIT cursor. Also allows to load
	cursors from named resources in the executable.
	(gdk_cursor_get_image) : just return NULL for now.

	* gdk/win32/gdkgeometry-win32.c : implement gdk_window_move_region()
	by delegation to ScollWindowEx(), untested.

	* gdk/win32/gdkwindow-win32.c : stub for gdk_window_set_urgency_hint()
2005-07-03 15:47:42 +00:00
Matthias Clasen
d4c43a42ad Use GMappedFile.
2005-06-27  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkiconcache.c (_gtk_icon_cache_new_for_path): Use
	GMappedFile.

	* configure.in: Require GLib 2.7.1
2005-06-27 04:49:03 +00:00
Matthias Clasen
350a050c77 Remove a leftover debugging envvar.
2005-06-23  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkiconcache.c (_gtk_icon_cache_new_for_path): Remove
	a leftover debugging envvar.
2005-06-23 17:05:17 +00:00
Matthias Clasen
a4768daec1 Handle missing MAP_FAILED. (#308449, Georg Schwarz)
2005-06-20  Matthias Clasen  <mclasen@redhat.com>

	* xdgmimecache.c: Handle missing MAP_FAILED.  (#308449, Georg
	Schwarz)
2005-06-21 03:36:52 +00:00
Matthias Clasen
7cbd85cda2 Use the same function as in updateiconcache.c. (spotted by Morten
2005-04-08  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkiconcache.c (icon_name_hash): Use the same function
	as in updateiconcache.c.  (spotted by Morten Welinder)
2005-04-09 02:12:34 +00:00
Matthias Clasen
cca8dd6347 Make PLT-reduction work with gcc4, and don't include everything in
2005-03-20  Matthias Clasen  <mclasen@redhat.com>

	Make PLT-reduction work with gcc4, and don't include
	everything in gdkalias.h:

	* gtk/grk.symbols: Group symbols by header and source file.
	* gtk/makegtkalias.pl: Protect definitions by the same
	preprocessor symbols used to guard the headers. Move
	the alias declarations to a separate file which is
	produced when calling makegtkalias.pl -def
	* gdk/Makefile.am (gtkaliasdef.c): Add a rule to generate
	this file.
	* gtk/*.c: Include gtkalias.h after the other headers,
	include gtkaliasdef.c at the bottom.
	* gtk/*.h: Small cleanups.
2005-03-20 07:01:23 +00:00
Anders Carlsson
3fc42d7ab9 Update spec.
2005-03-15  Anders Carlsson  <andersca@imendio.com>

	* docs/iconcache.txt:
	Update spec.

	* gtk/gtkiconcache.c: (find_image_offset),
	(_gtk_icon_cache_get_icon_flags), (_gtk_icon_cache_add_icons),
	(_gtk_icon_cache_get_icon), (_gtk_icon_cache_get_icon_data):
	* gtk/gtkiconcache.h:
	Update to be able to fetch pixbuf data and icon metadata.

	* gtk/gtkicontheme.c: (theme_lookup_icon), (gtk_icon_info_free),
	(icon_info_ensure_scale_and_pixbuf):
	Use new cache functions.

	* gtk/updateiconcache.c: (foreach_remove_func), (load_icon_data),
	(maybe_cache_image_data), (scan_directory), (write_pixdata),
	(get_image_meta_data_size), (get_image_pixel_data_size),
	(get_image_data_size), (get_single_node_size), (get_bucket_size),
	(write_bucket), (main):
	Update to write pixbuf data as well as information from .icon
	files.
2005-03-15 13:18:25 +00:00
Tor Lillqvist
f3da170539 gtk/gtkaccelmap.[ch] gtk/gtkfilechooser.[ch] gtk/gtkfilesel.c
2004-12-12  Tor Lillqvist  <tml@iki.fi>

	* gtk/gtkaccelmap.[ch]
	* gtk/gtkfilechooser.[ch]
	* gtk/gtkfilesel.c
	* gtk/gtkfilesystemwin32.c
	* gtk/gtkiconfactory.[ch]
	* gtk/gtkicontheme.[ch]
	* gtk/gtkimage.[ch]
	* gtk/gtkimmodule.c
	* gtk/gtkmodules.c
	* gtk/gtkrc.[ch]
	* gtk/gtkuimanager.[ch]
	* gtk/gtkwindow.[ch]
	* gtk/updateiconcache.c
	* gtk/gtk.symbols: Use gstdio wrappers. On Windows, convert
	environment variables referring to pathnames from locale encoding
	to UTF-8. As in GLib, in order to preserve Windows DLL ABI
	stability, add binary compatibility versions of functions that
	take file names as arguments, or return file names. Add a _utf8
	suffix to the "real" such functions on Windows. The ABI
	compatibility versions keep the old name.

	* gtk/Makefile.am: Strip PRIVATE symbols from the GNU import
	library.

	* gtk/gtkiconcache.c (_gtk_icon_cache_new_for_path): Implement
	file mapping on Win32.

	* gtk/updateiconcache.c: Don't crash if invoked without
	argument. Use binary mode when opening file.

	* modules/engines/ms-windows/Theme/gtk-2.0/Makefile.am: Install
	gtkrc in correct place, in <datadir>/themes/MS-Windows/gtk-2.0.
2004-12-12 21:09:13 +00:00
Matthias Clasen
92b3cda495 *** empty log message *** 2004-10-21 19:01:29 +00:00
Matthias Clasen
a34d841d79 Implement for cached themes.
2004-10-21  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkicontheme.c (gtk_icon_theme_has_icon): Implement for
	cached themes.

	* gtk/gtkiconcache.h:
	* gtk/gtkiconcache.c (_gtk_icon_cache_has_icon): New function.

	* gtk/updateiconcache.c (scan_directory): Don't skip .icon
	files which are listed before their images.
	(foreach_remove_func): Instead filter lonely .icon files out
	here.

	* gtk/gtkicontheme.c (theme_dir_get_icon_suffix): Filter out
	the HAS_ICON_FILE flag.
2004-10-21 18:44:08 +00:00
Matthias Clasen
1cf454c93b Make it compile without mmap() and add some more checks. (#155973, Morten
2004-10-21  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkiconcache.c: Make it compile without mmap() and
	add some more checks.  (#155973, Morten Welinder)
2004-10-21 05:19:27 +00:00
Matthias Clasen
6fc2b8118a Implement icon theme caching. (#154034, Martijn Vernooij, caching schema
2004-10-19  Matthias Clasen  <mclasen@redhat.com>

	Implement icon theme caching.  (#154034, Martijn Vernooij,
	caching schema proposed by Owen Taylor, initial implementation
	by Anders Carlsson)

	* gtk/gtkdebug.h:
	* gtk/gtkmain.c: Add a "icontheme" debug flag.

	* gtk/Makefile.am (gtk_c_sources): Add gtkiconcache.c
	(gtk_private_h_sources): Add gtkiconcache.h
	(bin_PROGRAMS): Add gtk-update-icon-cache

	* gtk/gtkicontheme.c: Use icon caches if they are available.
	Currently, GTK+ uses the cache to get information about the
	available sizes, image file formats and .icon files. The
	actual image data, and the .icon file contents are not
	cached yet.

	* gtk/updateiconcache.c: A cmdline utility for generating
	icon cache files.

	* gtk/gtkiconcache.h:
	* gtk/gtkiconcache.c: The glue code to mmap an icon cache
	file and manage the information it contains.
2004-10-19 18:45:41 +00:00