From 0d17856e588fe31a52668088f9a44da08685f6f4 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Sat, 11 Aug 2007 17:15:52 +0000 Subject: [PATCH] libgimpbase/gimpbaseenums.[ch] changed enum GimpUserDirectory and API of 2007-08-11 Michael Natterer * libgimpbase/gimpbaseenums.[ch] * libgimpbase/gimpenv.[ch]: changed enum GimpUserDirectory and API of gimp_user_directory() so that g_get_user_special_dir() can be used instead as soon as we depend on GLib 2.14. * tools/pdbgen/enums.pl: regenerated. * app/widgets/gimpfiledialog.c * plug-ins/pygimp/gimpmodule.c: changed accordingly. svn path=/trunk/; revision=23212 --- ChangeLog | 12 ++++ app/widgets/gimpfiledialog.c | 9 +-- libgimpbase/gimpbaseenums.c | 4 ++ libgimpbase/gimpbaseenums.h | 2 + libgimpbase/gimpenv.c | 120 +++++++++++++++++++---------------- libgimpbase/gimpenv.h | 2 +- plug-ins/pygimp/gimpmodule.c | 3 +- tools/pdbgen/enums.pl | 12 ++-- 8 files changed, 97 insertions(+), 67 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3715de4ac2..49f095b6d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-08-11 Michael Natterer + + * libgimpbase/gimpbaseenums.[ch] + * libgimpbase/gimpenv.[ch]: changed enum GimpUserDirectory and API + of gimp_user_directory() so that g_get_user_special_dir() can be + used instead as soon as we depend on GLib 2.14. + + * tools/pdbgen/enums.pl: regenerated. + + * app/widgets/gimpfiledialog.c + * plug-ins/pygimp/gimpmodule.c: changed accordingly. + 2007-08-11 Sven Neumann * menus/image-menu.xml.in: added "/Image/Mode/Color Profile" diff --git a/app/widgets/gimpfiledialog.c b/app/widgets/gimpfiledialog.c index b0f7f0ae83..130f1a6f0f 100644 --- a/app/widgets/gimpfiledialog.c +++ b/app/widgets/gimpfiledialog.c @@ -256,7 +256,7 @@ gimp_file_dialog_new (Gimp *gimp, GSList *file_procs; const gchar *automatic; const gchar *automatic_help_id; - gchar *pictures; + const gchar *pictures; gboolean local_only; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); @@ -338,11 +338,8 @@ gimp_file_dialog_new (Gimp *gimp, pictures = gimp_user_directory (GIMP_USER_DIRECTORY_PICTURES); if (pictures) - { - gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), - pictures, NULL); - g_free (pictures); - } + gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), + pictures, NULL); gimp_file_dialog_add_preview (dialog, gimp); diff --git a/libgimpbase/gimpbaseenums.c b/libgimpbase/gimpbaseenums.c index 1d666941a2..139954c56b 100644 --- a/libgimpbase/gimpbaseenums.c +++ b/libgimpbase/gimpbaseenums.c @@ -1038,8 +1038,10 @@ gimp_user_directory_get_type (void) { { GIMP_USER_DIRECTORY_DESKTOP, "GIMP_USER_DIRECTORY_DESKTOP", "desktop" }, { GIMP_USER_DIRECTORY_DOCUMENTS, "GIMP_USER_DIRECTORY_DOCUMENTS", "documents" }, + { GIMP_USER_DIRECTORY_DOWNLOAD, "GIMP_USER_DIRECTORY_DOWNLOAD", "download" }, { GIMP_USER_DIRECTORY_MUSIC, "GIMP_USER_DIRECTORY_MUSIC", "music" }, { GIMP_USER_DIRECTORY_PICTURES, "GIMP_USER_DIRECTORY_PICTURES", "pictures" }, + { GIMP_USER_DIRECTORY_PUBLIC_SHARE, "GIMP_USER_DIRECTORY_PUBLIC_SHARE", "public-share" }, { GIMP_USER_DIRECTORY_TEMPLATES, "GIMP_USER_DIRECTORY_TEMPLATES", "templates" }, { GIMP_USER_DIRECTORY_VIDEOS, "GIMP_USER_DIRECTORY_VIDEOS", "videos" }, { 0, NULL, NULL } @@ -1049,8 +1051,10 @@ gimp_user_directory_get_type (void) { { GIMP_USER_DIRECTORY_DESKTOP, "GIMP_USER_DIRECTORY_DESKTOP", NULL }, { GIMP_USER_DIRECTORY_DOCUMENTS, "GIMP_USER_DIRECTORY_DOCUMENTS", NULL }, + { GIMP_USER_DIRECTORY_DOWNLOAD, "GIMP_USER_DIRECTORY_DOWNLOAD", NULL }, { GIMP_USER_DIRECTORY_MUSIC, "GIMP_USER_DIRECTORY_MUSIC", NULL }, { GIMP_USER_DIRECTORY_PICTURES, "GIMP_USER_DIRECTORY_PICTURES", NULL }, + { GIMP_USER_DIRECTORY_PUBLIC_SHARE, "GIMP_USER_DIRECTORY_PUBLIC_SHARE", NULL }, { GIMP_USER_DIRECTORY_TEMPLATES, "GIMP_USER_DIRECTORY_TEMPLATES", NULL }, { GIMP_USER_DIRECTORY_VIDEOS, "GIMP_USER_DIRECTORY_VIDEOS", NULL }, { 0, NULL, NULL } diff --git a/libgimpbase/gimpbaseenums.h b/libgimpbase/gimpbaseenums.h index 6bf4ad9d35..0735ca0b1e 100644 --- a/libgimpbase/gimpbaseenums.h +++ b/libgimpbase/gimpbaseenums.h @@ -457,8 +457,10 @@ typedef enum { GIMP_USER_DIRECTORY_DESKTOP, GIMP_USER_DIRECTORY_DOCUMENTS, + GIMP_USER_DIRECTORY_DOWNLOAD, GIMP_USER_DIRECTORY_MUSIC, GIMP_USER_DIRECTORY_PICTURES, + GIMP_USER_DIRECTORY_PUBLIC_SHARE, GIMP_USER_DIRECTORY_TEMPLATES, GIMP_USER_DIRECTORY_VIDEOS } GimpUserDirectory; diff --git a/libgimpbase/gimpenv.c b/libgimpbase/gimpenv.c index 766e5a4c4b..618a6b642c 100644 --- a/libgimpbase/gimpenv.c +++ b/libgimpbase/gimpenv.c @@ -488,6 +488,8 @@ find_folder (OSType type) } #endif +static gchar **gimp_user_directories = NULL; + /** * gimp_user_directory: * @type: the type of user directory to retrieve @@ -498,77 +500,87 @@ find_folder (OSType type) * Plug-ins may want to use this function to add shortcuts to such * folders to a file-chooser. * - * Returns: a newly allocated directory name in filesystem encoding, - * or %NULL + * Returns: The path to the specified user directory, or %NULL if the + * logical ID was not found. * * Since: GIMP 2.4 **/ -gchar * +const gchar * gimp_user_directory (GimpUserDirectory type) { - switch (type) + g_return_val_if_fail (type >= GIMP_USER_DIRECTORY_DESKTOP && + type <= GIMP_USER_DIRECTORY_VIDEOS, NULL); + + if (G_UNLIKELY (gimp_user_directories == NULL)) { + gimp_user_directories = g_new0 (gchar *, GIMP_USER_DIRECTORY_VIDEOS + 1); + #ifdef G_OS_WIN32 - case GIMP_USER_DIRECTORY_DESKTOP: - return get_special_folder (CSIDL_DESKTOPDIRECTORY); - case GIMP_USER_DIRECTORY_DOCUMENTS: - return get_special_folder (CSIDL_MYDOCUMENTS); - - case GIMP_USER_DIRECTORY_MUSIC: - return get_special_folder (CSIDL_MYMUSIC); - - case GIMP_USER_DIRECTORY_PICTURES: - return get_special_folder (CSIDL_MYPICTURES); - - case GIMP_USER_DIRECTORY_TEMPLATES: - return get_special_folder (CSIDL_TEMPLATES); - - case GIMP_USER_DIRECTORY_VIDEOS: - return get_special_folder (CSIDL_MYVIDEO); + gimp_user_directories[GIMP_USER_DIRECTORY_DESKTOP] = + get_special_folder (CSIDL_DESKTOPDIRECTORY); + gimp_user_directories[GIMP_USER_DIRECTORY_DOCUMENTS] = + get_special_folder (CSIDL_MYDOCUMENTS); + gimp_user_directories[GIMP_USER_DIRECTORY_DOWNLOAD] = + get_special_folder (CSIDL_DESKTOPDIRECTORY); + gimp_user_directories[GIMP_USER_DIRECTORY_MUSIC] = + get_special_folder (CSIDL_MYMUSIC); + gimp_user_directories[GIMP_USER_DIRECTORY_PICTURES] = + get_special_folder (CSIDL_MYPICTURES); + gimp_user_directories[GIMP_USER_DIRECTORY_PUBLIC_SHARE] = + get_special_folder (CSIDL_COMMON_DOCUMENTS); + gimp_user_directories[GIMP_USER_DIRECTORY_TEMPLATES] = + get_special_folder (CSIDL_TEMPLATES); + gimp_user_directories[GIMP_USER_DIRECTORY_VIDEOS] = + get_special_folder (CSIDL_MYVIDEO); #elif HAVE_CARBON - case GIMP_USER_DIRECTORY_DESKTOP: - return find_folder (kDesktopFolderType); - case GIMP_USER_DIRECTORY_DOCUMENTS: - return find_folder (kDocumentsFolderType); - - case GIMP_USER_DIRECTORY_MUSIC: - return find_folder (kMusicDocumentsFolderType); - - case GIMP_USER_DIRECTORY_PICTURES: - return find_folder (kPictureDocumentsFolderType); - - case GIMP_USER_DIRECTORY_TEMPLATES: - return NULL; - - case GIMP_USER_DIRECTORY_VIDEOS: - return find_folder (kMovieDocumentsFolderType); + gimp_user_directories[GIMP_USER_DIRECTORY_DESKTOP] = + find_folder (kDesktopFolderType); + gimp_user_directories[GIMP_USER_DIRECTORY_DOCUMENTS] = + find_folder (kDocumentsFolderType); + gimp_user_directories[GIMP_USER_DIRECTORY_DOWNLOAD] = + find_folder (kDesktopFolderType); /* ??? */ + gimp_user_directories[GIMP_USER_DIRECTORY_MUSIC] = + find_folder (kMusicDocumentsFolderType); + gimp_user_directories[GIMP_USER_DIRECTORY_PICTURES] = + find_folder (kPictureDocumentsFolderType); + gimp_user_directories[GIMP_USER_DIRECTORY_PUBLIC_SHARE] = NULL; + gimp_user_directories[GIMP_USER_DIRECTORY_TEMPLATES] = NULL; + gimp_user_directories[GIMP_USER_DIRECTORY_VIDEOS] = + find_folder (kMovieDocumentsFolderType); #else - case GIMP_USER_DIRECTORY_DESKTOP: - return _xdg_user_dir_lookup ("DESKTOP"); - case GIMP_USER_DIRECTORY_DOCUMENTS: - return _xdg_user_dir_lookup ("DOCUMENTS"); - - case GIMP_USER_DIRECTORY_MUSIC: - return _xdg_user_dir_lookup ("MUSIC"); - - case GIMP_USER_DIRECTORY_PICTURES: - return _xdg_user_dir_lookup ("PICTURES"); - - case GIMP_USER_DIRECTORY_TEMPLATES: - return _xdg_user_dir_lookup ("TEMPLATES"); - - case GIMP_USER_DIRECTORY_VIDEOS: - return _xdg_user_dir_lookup ("VIDEOS"); + gimp_user_directories[GIMP_USER_DIRECTORY_DESKTOP] = + _xdg_user_dir_lookup ("DESKTOP"); + gimp_user_directories[GIMP_USER_DIRECTORY_DOCUMENTS] = + _xdg_user_dir_lookup ("DOCUMENTS"); + gimp_user_directories[GIMP_USER_DIRECTORY_DOWNLOAD] = + _xdg_user_dir_lookup ("DOWNLOAD"); + gimp_user_directories[GIMP_USER_DIRECTORY_MUSIC] = + _xdg_user_dir_lookup ("MUSIC"); + gimp_user_directories[GIMP_USER_DIRECTORY_PICTURES] = + _xdg_user_dir_lookup ("PICTURES"); + gimp_user_directories[GIMP_USER_DIRECTORY_PUBLIC_SHARE] = + _xdg_user_dir_lookup ("PUBLICSHARE"); + gimp_user_directories[GIMP_USER_DIRECTORY_TEMPLATES] = + _xdg_user_dir_lookup ("TEMPLATES"); + gimp_user_directories[GIMP_USER_DIRECTORY_VIDEOS] = + _xdg_user_dir_lookup ("VIDEOS"); #endif - default: - return NULL; + + /* Special-case desktop for historical compatibility */ + if (gimp_user_directories[GIMP_USER_DIRECTORY_DESKTOP] == NULL) + { + gimp_user_directories[GIMP_USER_DIRECTORY_DESKTOP] = + g_build_filename (g_get_home_dir (), "Desktop", NULL); + } } + + return gimp_user_directories[type]; } /** diff --git a/libgimpbase/gimpenv.h b/libgimpbase/gimpenv.h index 2b7ffc186a..8ad647c6b6 100644 --- a/libgimpbase/gimpenv.h +++ b/libgimpbase/gimpenv.h @@ -49,7 +49,7 @@ const gchar * gimp_data_directory (void) G_GNUC_CONST; const gchar * gimp_locale_directory (void) G_GNUC_CONST; const gchar * gimp_sysconf_directory (void) G_GNUC_CONST; const gchar * gimp_plug_in_directory (void) G_GNUC_CONST; -gchar * gimp_user_directory (GimpUserDirectory type) G_GNUC_MALLOC; +const gchar * gimp_user_directory (GimpUserDirectory type) G_GNUC_CONST; const gchar * gimp_gtkrc (void) G_GNUC_CONST; gchar * gimp_personal_rc_file (const gchar *basename) G_GNUC_MALLOC; diff --git a/plug-ins/pygimp/gimpmodule.c b/plug-ins/pygimp/gimpmodule.c index 7ee5ec04f6..4d47cdc3f3 100644 --- a/plug-ins/pygimp/gimpmodule.c +++ b/plug-ins/pygimp/gimpmodule.c @@ -1399,7 +1399,7 @@ static PyObject * pygimp_user_directory(PyObject *self, PyObject *args, PyObject *kwargs) { GimpUserDirectory type; - char *user_dir; + const char *user_dir; PyObject *py_type, *ret; static char *kwlist[] = { "type", NULL }; @@ -1416,7 +1416,6 @@ pygimp_user_directory(PyObject *self, PyObject *args, PyObject *kwargs) if (user_dir) { ret = PyString_FromString(user_dir); - g_free(user_dir); } else { Py_INCREF(Py_None); ret = Py_None; diff --git a/tools/pdbgen/enums.pl b/tools/pdbgen/enums.pl index 370024f2fe..a2676cbfce 100644 --- a/tools/pdbgen/enums.pl +++ b/tools/pdbgen/enums.pl @@ -353,16 +353,20 @@ package Gimp::CodeGen::enums; header => 'libgimpbase/gimpbaseenums.h', symbols => [ qw(GIMP_USER_DIRECTORY_DESKTOP GIMP_USER_DIRECTORY_DOCUMENTS + GIMP_USER_DIRECTORY_DOWNLOAD GIMP_USER_DIRECTORY_MUSIC GIMP_USER_DIRECTORY_PICTURES + GIMP_USER_DIRECTORY_PUBLIC_SHARE GIMP_USER_DIRECTORY_TEMPLATES GIMP_USER_DIRECTORY_VIDEOS) ], mapping => { GIMP_USER_DIRECTORY_DESKTOP => '0', GIMP_USER_DIRECTORY_DOCUMENTS => '1', - GIMP_USER_DIRECTORY_MUSIC => '2', - GIMP_USER_DIRECTORY_PICTURES => '3', - GIMP_USER_DIRECTORY_TEMPLATES => '4', - GIMP_USER_DIRECTORY_VIDEOS => '5' } + GIMP_USER_DIRECTORY_DOWNLOAD => '2', + GIMP_USER_DIRECTORY_MUSIC => '3', + GIMP_USER_DIRECTORY_PICTURES => '4', + GIMP_USER_DIRECTORY_PUBLIC_SHARE => '5', + GIMP_USER_DIRECTORY_TEMPLATES => '6', + GIMP_USER_DIRECTORY_VIDEOS => '7' } }, GimpVectorsStrokeType => { contig => 1,