mirror of https://github.com/GNOME/gimp.git
fixed a gtk-doc comment.
2000-02-21 Michael Natterer <mitch@gimp.org> * libgimp/gimppixmap.c: fixed a gtk-doc comment. * libgimp/gimpenv.[ch]: new functions: - gimp_path_parse(): Creates a GList of strings from a searchpath string and performs sanity checks. - gimp_path_to_str(): Creates a searchpath string from the list returned by gimp_path_parse(). - gimp_path_free(): Frees the list returned by gimp_path_parse(). - gimp_path_get_user_writable_dir(): Returns the first dir in a path where the user has write access. With this function the "Save" dialogs of some plugins always show the plugin's subdirectory of the user's gimp_dir instead of the read-only global one. * app/datafiles.[ch] * app/gimpbrushlist.c: use the new functions and s/datafile_loader_t/GimpDataFileLoaderFunc/. * plug-ins/FractalExplorer/Dialogs.c * plug-ins/FractalExplorer/FractalExplorer.c * plug-ins/gfig/gfig.c * plug-ins/gflare/gflare.c * plug-ins/gimpressionist/gimpressionist.c: use the new functions.
This commit is contained in:
parent
d4b05436ec
commit
ed071953b2
27
ChangeLog
27
ChangeLog
|
@ -1,3 +1,30 @@
|
|||
2000-02-21 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* libgimp/gimppixmap.c: fixed a gtk-doc comment.
|
||||
|
||||
* libgimp/gimpenv.[ch]: new functions:
|
||||
|
||||
- gimp_path_parse(): Creates a GList of strings from a searchpath
|
||||
string and performs sanity checks.
|
||||
- gimp_path_to_str(): Creates a searchpath string from the list
|
||||
returned by gimp_path_parse().
|
||||
- gimp_path_free(): Frees the list returned by gimp_path_parse().
|
||||
- gimp_path_get_user_writable_dir(): Returns the first dir in a
|
||||
path where the user has write access. With this function the
|
||||
"Save" dialogs of some plugins always show the plugin's
|
||||
subdirectory of the user's gimp_dir instead of the read-only
|
||||
global one.
|
||||
|
||||
* app/datafiles.[ch]
|
||||
* app/gimpbrushlist.c: use the new functions and
|
||||
s/datafile_loader_t/GimpDataFileLoaderFunc/.
|
||||
|
||||
* plug-ins/FractalExplorer/Dialogs.c
|
||||
* plug-ins/FractalExplorer/FractalExplorer.c
|
||||
* plug-ins/gfig/gfig.c
|
||||
* plug-ins/gflare/gflare.c
|
||||
* plug-ins/gimpressionist/gimpressionist.c: use the new functions.
|
||||
|
||||
Mon Feb 21 14:05:56 CET 2000 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/gimpbrushlist.c
|
||||
|
|
|
@ -45,16 +45,13 @@
|
|||
#endif /* G_OS_WIN32 */
|
||||
|
||||
#include "datafiles.h"
|
||||
#include "errors.h"
|
||||
#include "general.h"
|
||||
#include "gimprc.h"
|
||||
|
||||
#include "libgimp/gimpenv.h"
|
||||
|
||||
/***** Functions *****/
|
||||
|
||||
/*****/
|
||||
|
||||
static int filestat_valid = 0;
|
||||
static gint filestat_valid = 0;
|
||||
static struct stat filestat;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
|
@ -66,7 +63,7 @@ static struct stat filestat;
|
|||
* variable, which is also used by cmd.exe.
|
||||
*/
|
||||
gboolean
|
||||
is_script (const gchar* filename)
|
||||
is_script (const gchar *filename)
|
||||
{
|
||||
const gchar *ext = strrchr (filename, '.');
|
||||
gchar *pathext;
|
||||
|
@ -103,105 +100,78 @@ is_script (const gchar* filename)
|
|||
#endif
|
||||
|
||||
void
|
||||
datafiles_read_directories (char *path_str,
|
||||
datafile_loader_t loader_func,
|
||||
int flags)
|
||||
datafiles_read_directories (gchar *path_str,
|
||||
GimpDataFileLoaderFunc loader_func,
|
||||
gint flags)
|
||||
{
|
||||
char *home;
|
||||
char *local_path;
|
||||
char *path;
|
||||
char *filename;
|
||||
char *token;
|
||||
char *next_token;
|
||||
int err;
|
||||
DIR *dir;
|
||||
gchar *local_path;
|
||||
GList *path;
|
||||
GList *list;
|
||||
gchar *filename;
|
||||
gint err;
|
||||
DIR *dir;
|
||||
struct dirent *dir_ent;
|
||||
|
||||
if (path_str == NULL)
|
||||
return;
|
||||
|
||||
/* Set local path to contain temp_path, where (supposedly)
|
||||
* there may be working files.
|
||||
*/
|
||||
home = g_get_home_dir ();
|
||||
local_path = g_strdup (path_str);
|
||||
|
||||
#ifdef __EMX__
|
||||
/*
|
||||
* Change drive so opendir works.
|
||||
*/
|
||||
if (local_path[1] == ':')
|
||||
{
|
||||
_chdrive(local_path[0]);
|
||||
}
|
||||
#endif
|
||||
/* Search through all directories in the local path */
|
||||
|
||||
next_token = local_path;
|
||||
|
||||
token = xstrsep(&next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
|
||||
while (token)
|
||||
{
|
||||
if (*token == '~')
|
||||
_chdrive (local_path[0]);
|
||||
}
|
||||
#endif
|
||||
|
||||
path = gimp_path_parse (local_path, 16, TRUE, NULL);
|
||||
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
/* Open directory */
|
||||
dir = opendir ((gchar *) list->data);
|
||||
|
||||
if (!dir)
|
||||
{
|
||||
path = g_malloc(strlen(home) + strlen(token) + 1);
|
||||
sprintf(path, "%s%s", home, token + 1);
|
||||
g_message ("error reading datafiles directory \"%s\"",
|
||||
(gchar *) list->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = g_malloc(strlen(token) + 2);
|
||||
strcpy(path, token);
|
||||
} /* else */
|
||||
|
||||
/* Check if directory exists and if it has any items in it */
|
||||
err = stat(path, &filestat);
|
||||
|
||||
if (!err && S_ISDIR(filestat.st_mode))
|
||||
{
|
||||
if (path[strlen(path) - 1] != G_DIR_SEPARATOR)
|
||||
strcat(path, G_DIR_SEPARATOR_S);
|
||||
|
||||
/* Open directory */
|
||||
dir = opendir(path);
|
||||
|
||||
if (!dir)
|
||||
g_message ("error reading datafiles directory \"%s\"", path);
|
||||
else
|
||||
while ((dir_ent = readdir(dir)))
|
||||
{
|
||||
while ((dir_ent = readdir(dir)))
|
||||
filename = g_strdup_printf ("%s%s",
|
||||
(gchar *) list->data,
|
||||
dir_ent->d_name);
|
||||
|
||||
/* Check the file and see that it is not a sub-directory */
|
||||
err = stat (filename, &filestat);
|
||||
|
||||
if (!err && S_ISREG (filestat.st_mode) &&
|
||||
(!(flags & MODE_EXECUTABLE) ||
|
||||
(filestat.st_mode & S_IXUSR) ||
|
||||
is_script (filename)))
|
||||
{
|
||||
filename = g_strdup_printf("%s%s", path, dir_ent->d_name);
|
||||
filestat_valid = 1;
|
||||
(*loader_func) (filename);
|
||||
filestat_valid = 0;
|
||||
}
|
||||
|
||||
/* Check the file and see that it is not a sub-directory */
|
||||
err = stat(filename, &filestat);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
if (!err && S_ISREG(filestat.st_mode) &&
|
||||
(!(flags & MODE_EXECUTABLE) ||
|
||||
(filestat.st_mode & S_IXUSR) ||
|
||||
is_script (filename)))
|
||||
{
|
||||
filestat_valid = 1;
|
||||
(*loader_func) (filename);
|
||||
filestat_valid = 0;
|
||||
}
|
||||
closedir (dir);
|
||||
}
|
||||
}
|
||||
|
||||
g_free(filename);
|
||||
} /* while */
|
||||
|
||||
closedir(dir);
|
||||
} /* else */
|
||||
} /* if */
|
||||
|
||||
g_free(path);
|
||||
|
||||
token = xstrsep(&next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
} /* while */
|
||||
|
||||
g_free(local_path);
|
||||
} /* datafiles_read_directories */
|
||||
gimp_path_free (path);
|
||||
}
|
||||
|
||||
time_t
|
||||
datafile_atime ()
|
||||
datafile_atime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_atime;
|
||||
|
@ -209,7 +179,7 @@ datafile_atime ()
|
|||
}
|
||||
|
||||
time_t
|
||||
datafile_mtime ()
|
||||
datafile_mtime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_mtime;
|
||||
|
@ -217,7 +187,7 @@ datafile_mtime ()
|
|||
}
|
||||
|
||||
time_t
|
||||
datafile_ctime ()
|
||||
datafile_ctime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_ctime;
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _DATAFILES_H_
|
||||
#define _DATAFILES_H_
|
||||
#ifndef __DATAFILES_H__
|
||||
#define __DATAFILES_H__
|
||||
|
||||
#include <time.h>
|
||||
#include <glib.h>
|
||||
|
||||
#define INCLUDE_TEMP_DIR 0x1
|
||||
#define MODE_EXECUTABLE 0x2
|
||||
|
@ -31,23 +31,22 @@
|
|||
|
||||
/***** Types *****/
|
||||
|
||||
typedef void (*datafile_loader_t) (char *filename);
|
||||
typedef void (* GimpDataFileLoaderFunc) (gchar *filename);
|
||||
|
||||
|
||||
/***** Functions *****/
|
||||
|
||||
void datafiles_read_directories(char *path_str,
|
||||
datafile_loader_t loader_func,
|
||||
int flags);
|
||||
void datafiles_read_directories (gchar *path_str,
|
||||
GimpDataFileLoaderFunc loader_func,
|
||||
gint flags);
|
||||
|
||||
/* Return the current datafiles access, modification
|
||||
* or change time. The current datafile is the one for
|
||||
* which the "datafile_loader_t" function has been called
|
||||
* which the "DataFileLoaderFunc" function has been called
|
||||
* on.
|
||||
*/
|
||||
time_t datafile_atime (void);
|
||||
time_t datafile_mtime (void);
|
||||
time_t datafile_ctime (void);
|
||||
|
||||
|
||||
#endif
|
||||
#endif /* __DATAFILES_H__ */
|
||||
|
|
136
app/datafiles.c
136
app/datafiles.c
|
@ -45,16 +45,13 @@
|
|||
#endif /* G_OS_WIN32 */
|
||||
|
||||
#include "datafiles.h"
|
||||
#include "errors.h"
|
||||
#include "general.h"
|
||||
#include "gimprc.h"
|
||||
|
||||
#include "libgimp/gimpenv.h"
|
||||
|
||||
/***** Functions *****/
|
||||
|
||||
/*****/
|
||||
|
||||
static int filestat_valid = 0;
|
||||
static gint filestat_valid = 0;
|
||||
static struct stat filestat;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
|
@ -66,7 +63,7 @@ static struct stat filestat;
|
|||
* variable, which is also used by cmd.exe.
|
||||
*/
|
||||
gboolean
|
||||
is_script (const gchar* filename)
|
||||
is_script (const gchar *filename)
|
||||
{
|
||||
const gchar *ext = strrchr (filename, '.');
|
||||
gchar *pathext;
|
||||
|
@ -103,105 +100,78 @@ is_script (const gchar* filename)
|
|||
#endif
|
||||
|
||||
void
|
||||
datafiles_read_directories (char *path_str,
|
||||
datafile_loader_t loader_func,
|
||||
int flags)
|
||||
datafiles_read_directories (gchar *path_str,
|
||||
GimpDataFileLoaderFunc loader_func,
|
||||
gint flags)
|
||||
{
|
||||
char *home;
|
||||
char *local_path;
|
||||
char *path;
|
||||
char *filename;
|
||||
char *token;
|
||||
char *next_token;
|
||||
int err;
|
||||
DIR *dir;
|
||||
gchar *local_path;
|
||||
GList *path;
|
||||
GList *list;
|
||||
gchar *filename;
|
||||
gint err;
|
||||
DIR *dir;
|
||||
struct dirent *dir_ent;
|
||||
|
||||
if (path_str == NULL)
|
||||
return;
|
||||
|
||||
/* Set local path to contain temp_path, where (supposedly)
|
||||
* there may be working files.
|
||||
*/
|
||||
home = g_get_home_dir ();
|
||||
local_path = g_strdup (path_str);
|
||||
|
||||
#ifdef __EMX__
|
||||
/*
|
||||
* Change drive so opendir works.
|
||||
*/
|
||||
if (local_path[1] == ':')
|
||||
{
|
||||
_chdrive(local_path[0]);
|
||||
}
|
||||
#endif
|
||||
/* Search through all directories in the local path */
|
||||
|
||||
next_token = local_path;
|
||||
|
||||
token = xstrsep(&next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
|
||||
while (token)
|
||||
{
|
||||
if (*token == '~')
|
||||
_chdrive (local_path[0]);
|
||||
}
|
||||
#endif
|
||||
|
||||
path = gimp_path_parse (local_path, 16, TRUE, NULL);
|
||||
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
/* Open directory */
|
||||
dir = opendir ((gchar *) list->data);
|
||||
|
||||
if (!dir)
|
||||
{
|
||||
path = g_malloc(strlen(home) + strlen(token) + 1);
|
||||
sprintf(path, "%s%s", home, token + 1);
|
||||
g_message ("error reading datafiles directory \"%s\"",
|
||||
(gchar *) list->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = g_malloc(strlen(token) + 2);
|
||||
strcpy(path, token);
|
||||
} /* else */
|
||||
|
||||
/* Check if directory exists and if it has any items in it */
|
||||
err = stat(path, &filestat);
|
||||
|
||||
if (!err && S_ISDIR(filestat.st_mode))
|
||||
{
|
||||
if (path[strlen(path) - 1] != G_DIR_SEPARATOR)
|
||||
strcat(path, G_DIR_SEPARATOR_S);
|
||||
|
||||
/* Open directory */
|
||||
dir = opendir(path);
|
||||
|
||||
if (!dir)
|
||||
g_message ("error reading datafiles directory \"%s\"", path);
|
||||
else
|
||||
while ((dir_ent = readdir(dir)))
|
||||
{
|
||||
while ((dir_ent = readdir(dir)))
|
||||
filename = g_strdup_printf ("%s%s",
|
||||
(gchar *) list->data,
|
||||
dir_ent->d_name);
|
||||
|
||||
/* Check the file and see that it is not a sub-directory */
|
||||
err = stat (filename, &filestat);
|
||||
|
||||
if (!err && S_ISREG (filestat.st_mode) &&
|
||||
(!(flags & MODE_EXECUTABLE) ||
|
||||
(filestat.st_mode & S_IXUSR) ||
|
||||
is_script (filename)))
|
||||
{
|
||||
filename = g_strdup_printf("%s%s", path, dir_ent->d_name);
|
||||
filestat_valid = 1;
|
||||
(*loader_func) (filename);
|
||||
filestat_valid = 0;
|
||||
}
|
||||
|
||||
/* Check the file and see that it is not a sub-directory */
|
||||
err = stat(filename, &filestat);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
if (!err && S_ISREG(filestat.st_mode) &&
|
||||
(!(flags & MODE_EXECUTABLE) ||
|
||||
(filestat.st_mode & S_IXUSR) ||
|
||||
is_script (filename)))
|
||||
{
|
||||
filestat_valid = 1;
|
||||
(*loader_func) (filename);
|
||||
filestat_valid = 0;
|
||||
}
|
||||
closedir (dir);
|
||||
}
|
||||
}
|
||||
|
||||
g_free(filename);
|
||||
} /* while */
|
||||
|
||||
closedir(dir);
|
||||
} /* else */
|
||||
} /* if */
|
||||
|
||||
g_free(path);
|
||||
|
||||
token = xstrsep(&next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
} /* while */
|
||||
|
||||
g_free(local_path);
|
||||
} /* datafiles_read_directories */
|
||||
gimp_path_free (path);
|
||||
}
|
||||
|
||||
time_t
|
||||
datafile_atime ()
|
||||
datafile_atime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_atime;
|
||||
|
@ -209,7 +179,7 @@ datafile_atime ()
|
|||
}
|
||||
|
||||
time_t
|
||||
datafile_mtime ()
|
||||
datafile_mtime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_mtime;
|
||||
|
@ -217,7 +187,7 @@ datafile_mtime ()
|
|||
}
|
||||
|
||||
time_t
|
||||
datafile_ctime ()
|
||||
datafile_ctime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_ctime;
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _DATAFILES_H_
|
||||
#define _DATAFILES_H_
|
||||
#ifndef __DATAFILES_H__
|
||||
#define __DATAFILES_H__
|
||||
|
||||
#include <time.h>
|
||||
#include <glib.h>
|
||||
|
||||
#define INCLUDE_TEMP_DIR 0x1
|
||||
#define MODE_EXECUTABLE 0x2
|
||||
|
@ -31,23 +31,22 @@
|
|||
|
||||
/***** Types *****/
|
||||
|
||||
typedef void (*datafile_loader_t) (char *filename);
|
||||
typedef void (* GimpDataFileLoaderFunc) (gchar *filename);
|
||||
|
||||
|
||||
/***** Functions *****/
|
||||
|
||||
void datafiles_read_directories(char *path_str,
|
||||
datafile_loader_t loader_func,
|
||||
int flags);
|
||||
void datafiles_read_directories (gchar *path_str,
|
||||
GimpDataFileLoaderFunc loader_func,
|
||||
gint flags);
|
||||
|
||||
/* Return the current datafiles access, modification
|
||||
* or change time. The current datafile is the one for
|
||||
* which the "datafile_loader_t" function has been called
|
||||
* which the "DataFileLoaderFunc" function has been called
|
||||
* on.
|
||||
*/
|
||||
time_t datafile_atime (void);
|
||||
time_t datafile_mtime (void);
|
||||
time_t datafile_ctime (void);
|
||||
|
||||
|
||||
#endif
|
||||
#endif /* __DATAFILES_H__ */
|
||||
|
|
|
@ -53,10 +53,10 @@ GimpBrushList *brush_list = NULL;
|
|||
static GimpBrush *standard_brush = NULL;
|
||||
|
||||
/* local function prototypes */
|
||||
static void brushes_brush_load (gchar *filename);
|
||||
static void brushes_brush_load (gchar *filename);
|
||||
|
||||
static gint brush_compare_func (gconstpointer first,
|
||||
gconstpointer second);
|
||||
static gint brush_compare_func (gconstpointer first,
|
||||
gconstpointer second);
|
||||
|
||||
/* class functions */
|
||||
static GimpObjectClass* parent_class;
|
||||
|
@ -134,7 +134,7 @@ gimp_brush_list_new (void)
|
|||
|
||||
/* function declarations */
|
||||
void
|
||||
brushes_init (int no_data)
|
||||
brushes_init (gint no_data)
|
||||
{
|
||||
if (brush_list)
|
||||
brushes_free ();
|
||||
|
@ -146,9 +146,11 @@ brushes_init (int no_data)
|
|||
brush_select_freeze_all ();
|
||||
|
||||
datafiles_read_directories (brush_path,
|
||||
(datafile_loader_t) brushes_brush_load, 0);
|
||||
(GimpDataFileLoaderFunc) brushes_brush_load,
|
||||
0);
|
||||
datafiles_read_directories (brush_vbr_path,
|
||||
(datafile_loader_t) brushes_brush_load, 0);
|
||||
(GimpDataFileLoaderFunc) brushes_brush_load,
|
||||
0);
|
||||
|
||||
brush_select_thaw_all ();
|
||||
}
|
||||
|
|
|
@ -22,6 +22,12 @@
|
|||
|
||||
#include <glib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "gimpenv.h"
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
|
@ -240,6 +246,196 @@ gimp_gtkrc (void)
|
|||
return gimp_gtkrc_filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_parse:
|
||||
* @path: A list of directories separated by #G_SEARCHPATH_SEPARATOR.
|
||||
* @max_path: The maximum number of directories to return.
|
||||
* @check: #TRUE if you want the directories to be checked.
|
||||
* @not_found: #
|
||||
*
|
||||
* Return: A list of all directories in @path.
|
||||
*
|
||||
*/
|
||||
GList *
|
||||
gimp_path_parse (gchar *path,
|
||||
gint max_paths,
|
||||
gboolean check,
|
||||
GList **check_failed)
|
||||
{
|
||||
gchar *home;
|
||||
gchar **patharray;
|
||||
GList *list = NULL;
|
||||
GList *fail_list = NULL;
|
||||
gint i;
|
||||
|
||||
struct stat filestat;
|
||||
gint err = FALSE;
|
||||
|
||||
if (!path || !*path || max_paths < 1 || max_paths > 256)
|
||||
return NULL;
|
||||
|
||||
home = g_get_home_dir ();
|
||||
|
||||
patharray = g_strsplit (path, G_SEARCHPATH_SEPARATOR_S, max_paths);
|
||||
|
||||
for (i = 0; i < max_paths; i++)
|
||||
{
|
||||
GString *dir;
|
||||
|
||||
if (!patharray[i])
|
||||
break;
|
||||
|
||||
if (*patharray[i] == '~')
|
||||
{
|
||||
dir = g_string_new (home);
|
||||
g_string_append (dir, patharray[i] + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
dir = g_string_new (patharray[i]);
|
||||
}
|
||||
|
||||
#ifdef __EMX__
|
||||
_fnslashify (dir);
|
||||
#endif
|
||||
|
||||
if (check)
|
||||
{
|
||||
/* check if directory exists */
|
||||
err = stat (dir->str, &filestat);
|
||||
|
||||
if (!err && S_ISDIR (filestat.st_mode))
|
||||
{
|
||||
if (dir->str[dir->len - 1] != G_DIR_SEPARATOR)
|
||||
g_string_append_c (dir, G_DIR_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
if (!err)
|
||||
list = g_list_prepend (list, dir->str);
|
||||
else if (check_failed)
|
||||
fail_list = g_list_prepend (fail_list, dir->str);
|
||||
|
||||
g_string_free (dir, FALSE);
|
||||
}
|
||||
|
||||
g_strfreev (patharray);
|
||||
|
||||
list = g_list_reverse (list);
|
||||
|
||||
if (check && check_failed)
|
||||
{
|
||||
fail_list = g_list_reverse (fail_list);
|
||||
*check_failed = fail_list;
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_to_str:
|
||||
* @path: A list of directories as returned by gimp_path_parse().
|
||||
*
|
||||
* Returns: A searchpath string separated by #G_SEARCHPATH_SEPARATOR.
|
||||
*
|
||||
*/
|
||||
gchar *
|
||||
gimp_path_to_str (GList *path)
|
||||
{
|
||||
GString *str = NULL;
|
||||
GList *list;
|
||||
gchar *retval = NULL;
|
||||
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
if (str)
|
||||
{
|
||||
g_string_append_c (str, G_SEARCHPATH_SEPARATOR);
|
||||
g_string_append (str, (gchar *) list->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
str = g_string_new ((gchar *) list->data);
|
||||
}
|
||||
}
|
||||
|
||||
if (str)
|
||||
{
|
||||
retval = str->str;
|
||||
g_string_free (str, FALSE);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_free:
|
||||
* @path: A list of directories as returned by gimp_path_parse().
|
||||
*
|
||||
* This function frees the memory allocated for the list and it's strings.
|
||||
*
|
||||
*/
|
||||
void
|
||||
gimp_path_free (GList *path)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
if (path)
|
||||
{
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
g_free (list->data);
|
||||
}
|
||||
|
||||
g_list_free (path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_get_user_writable_dir:
|
||||
* @path: A list of directories as returned by gimp_path_parse().
|
||||
*
|
||||
* Returns: The first directory in @path where the user has write permission.
|
||||
*
|
||||
*/
|
||||
gchar *
|
||||
gimp_path_get_user_writable_dir (GList *path)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
uid_t euid;
|
||||
gid_t egid;
|
||||
|
||||
struct stat filestat;
|
||||
gint err;
|
||||
|
||||
euid = geteuid ();
|
||||
egid = getegid ();
|
||||
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
/* check if directory exists */
|
||||
err = stat ((gchar *) list->data, &filestat);
|
||||
|
||||
/* this is tricky:
|
||||
* if a file is e.g. owned by the current user but not user-writable,
|
||||
* the user has no permission to write to the file regardless
|
||||
* of his group's or other's write permissions
|
||||
*/
|
||||
if (!err && S_ISDIR (filestat.st_mode) &&
|
||||
|
||||
((filestat.st_mode & S_IWUSR) ||
|
||||
|
||||
((filestat.st_mode & S_IWGRP) &&
|
||||
(euid != filestat.st_uid)) ||
|
||||
|
||||
((filestat.st_mode & S_IWOTH) &&
|
||||
(euid != filestat.st_uid) &&
|
||||
(egid != filestat.st_gid))))
|
||||
{
|
||||
return (gchar *) list->data;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -27,10 +27,19 @@ extern "C" {
|
|||
|
||||
/* For information look into the C source or the html documentation */
|
||||
|
||||
gchar* gimp_directory (void);
|
||||
gchar* gimp_personal_rc_file (gchar *basename);
|
||||
gchar* gimp_data_directory (void);
|
||||
gchar* gimp_gtkrc (void);
|
||||
gchar * gimp_directory (void);
|
||||
gchar * gimp_personal_rc_file (gchar *basename);
|
||||
gchar * gimp_data_directory (void);
|
||||
gchar * gimp_gtkrc (void);
|
||||
|
||||
GList * gimp_path_parse (gchar *path,
|
||||
gint max_paths,
|
||||
gboolean check,
|
||||
GList **check_failed);
|
||||
gchar * gimp_path_to_str (GList *path);
|
||||
void gimp_path_free (GList *path);
|
||||
|
||||
gchar * gimp_path_get_user_writable_dir (GList *path);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ gimp_pixmap_new (gchar **xpm_data)
|
|||
}
|
||||
|
||||
/**
|
||||
* gimp_pixmap_new:
|
||||
* gimp_pixmap_set:
|
||||
* @pixmap: The pixmap widget you want to set the new xpm_data for.
|
||||
* @xpm_data: A pointer to a XPM data structure as found in XPM files.
|
||||
*
|
||||
|
|
|
@ -45,16 +45,13 @@
|
|||
#endif /* G_OS_WIN32 */
|
||||
|
||||
#include "datafiles.h"
|
||||
#include "errors.h"
|
||||
#include "general.h"
|
||||
#include "gimprc.h"
|
||||
|
||||
#include "libgimp/gimpenv.h"
|
||||
|
||||
/***** Functions *****/
|
||||
|
||||
/*****/
|
||||
|
||||
static int filestat_valid = 0;
|
||||
static gint filestat_valid = 0;
|
||||
static struct stat filestat;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
|
@ -66,7 +63,7 @@ static struct stat filestat;
|
|||
* variable, which is also used by cmd.exe.
|
||||
*/
|
||||
gboolean
|
||||
is_script (const gchar* filename)
|
||||
is_script (const gchar *filename)
|
||||
{
|
||||
const gchar *ext = strrchr (filename, '.');
|
||||
gchar *pathext;
|
||||
|
@ -103,105 +100,78 @@ is_script (const gchar* filename)
|
|||
#endif
|
||||
|
||||
void
|
||||
datafiles_read_directories (char *path_str,
|
||||
datafile_loader_t loader_func,
|
||||
int flags)
|
||||
datafiles_read_directories (gchar *path_str,
|
||||
GimpDataFileLoaderFunc loader_func,
|
||||
gint flags)
|
||||
{
|
||||
char *home;
|
||||
char *local_path;
|
||||
char *path;
|
||||
char *filename;
|
||||
char *token;
|
||||
char *next_token;
|
||||
int err;
|
||||
DIR *dir;
|
||||
gchar *local_path;
|
||||
GList *path;
|
||||
GList *list;
|
||||
gchar *filename;
|
||||
gint err;
|
||||
DIR *dir;
|
||||
struct dirent *dir_ent;
|
||||
|
||||
if (path_str == NULL)
|
||||
return;
|
||||
|
||||
/* Set local path to contain temp_path, where (supposedly)
|
||||
* there may be working files.
|
||||
*/
|
||||
home = g_get_home_dir ();
|
||||
local_path = g_strdup (path_str);
|
||||
|
||||
#ifdef __EMX__
|
||||
/*
|
||||
* Change drive so opendir works.
|
||||
*/
|
||||
if (local_path[1] == ':')
|
||||
{
|
||||
_chdrive(local_path[0]);
|
||||
}
|
||||
#endif
|
||||
/* Search through all directories in the local path */
|
||||
|
||||
next_token = local_path;
|
||||
|
||||
token = xstrsep(&next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
|
||||
while (token)
|
||||
{
|
||||
if (*token == '~')
|
||||
_chdrive (local_path[0]);
|
||||
}
|
||||
#endif
|
||||
|
||||
path = gimp_path_parse (local_path, 16, TRUE, NULL);
|
||||
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
/* Open directory */
|
||||
dir = opendir ((gchar *) list->data);
|
||||
|
||||
if (!dir)
|
||||
{
|
||||
path = g_malloc(strlen(home) + strlen(token) + 1);
|
||||
sprintf(path, "%s%s", home, token + 1);
|
||||
g_message ("error reading datafiles directory \"%s\"",
|
||||
(gchar *) list->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = g_malloc(strlen(token) + 2);
|
||||
strcpy(path, token);
|
||||
} /* else */
|
||||
|
||||
/* Check if directory exists and if it has any items in it */
|
||||
err = stat(path, &filestat);
|
||||
|
||||
if (!err && S_ISDIR(filestat.st_mode))
|
||||
{
|
||||
if (path[strlen(path) - 1] != G_DIR_SEPARATOR)
|
||||
strcat(path, G_DIR_SEPARATOR_S);
|
||||
|
||||
/* Open directory */
|
||||
dir = opendir(path);
|
||||
|
||||
if (!dir)
|
||||
g_message ("error reading datafiles directory \"%s\"", path);
|
||||
else
|
||||
while ((dir_ent = readdir(dir)))
|
||||
{
|
||||
while ((dir_ent = readdir(dir)))
|
||||
filename = g_strdup_printf ("%s%s",
|
||||
(gchar *) list->data,
|
||||
dir_ent->d_name);
|
||||
|
||||
/* Check the file and see that it is not a sub-directory */
|
||||
err = stat (filename, &filestat);
|
||||
|
||||
if (!err && S_ISREG (filestat.st_mode) &&
|
||||
(!(flags & MODE_EXECUTABLE) ||
|
||||
(filestat.st_mode & S_IXUSR) ||
|
||||
is_script (filename)))
|
||||
{
|
||||
filename = g_strdup_printf("%s%s", path, dir_ent->d_name);
|
||||
filestat_valid = 1;
|
||||
(*loader_func) (filename);
|
||||
filestat_valid = 0;
|
||||
}
|
||||
|
||||
/* Check the file and see that it is not a sub-directory */
|
||||
err = stat(filename, &filestat);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
if (!err && S_ISREG(filestat.st_mode) &&
|
||||
(!(flags & MODE_EXECUTABLE) ||
|
||||
(filestat.st_mode & S_IXUSR) ||
|
||||
is_script (filename)))
|
||||
{
|
||||
filestat_valid = 1;
|
||||
(*loader_func) (filename);
|
||||
filestat_valid = 0;
|
||||
}
|
||||
closedir (dir);
|
||||
}
|
||||
}
|
||||
|
||||
g_free(filename);
|
||||
} /* while */
|
||||
|
||||
closedir(dir);
|
||||
} /* else */
|
||||
} /* if */
|
||||
|
||||
g_free(path);
|
||||
|
||||
token = xstrsep(&next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
} /* while */
|
||||
|
||||
g_free(local_path);
|
||||
} /* datafiles_read_directories */
|
||||
gimp_path_free (path);
|
||||
}
|
||||
|
||||
time_t
|
||||
datafile_atime ()
|
||||
datafile_atime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_atime;
|
||||
|
@ -209,7 +179,7 @@ datafile_atime ()
|
|||
}
|
||||
|
||||
time_t
|
||||
datafile_mtime ()
|
||||
datafile_mtime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_mtime;
|
||||
|
@ -217,7 +187,7 @@ datafile_mtime ()
|
|||
}
|
||||
|
||||
time_t
|
||||
datafile_ctime ()
|
||||
datafile_ctime (void)
|
||||
{
|
||||
if (filestat_valid)
|
||||
return filestat.st_ctime;
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _DATAFILES_H_
|
||||
#define _DATAFILES_H_
|
||||
#ifndef __DATAFILES_H__
|
||||
#define __DATAFILES_H__
|
||||
|
||||
#include <time.h>
|
||||
#include <glib.h>
|
||||
|
||||
#define INCLUDE_TEMP_DIR 0x1
|
||||
#define MODE_EXECUTABLE 0x2
|
||||
|
@ -31,23 +31,22 @@
|
|||
|
||||
/***** Types *****/
|
||||
|
||||
typedef void (*datafile_loader_t) (char *filename);
|
||||
typedef void (* GimpDataFileLoaderFunc) (gchar *filename);
|
||||
|
||||
|
||||
/***** Functions *****/
|
||||
|
||||
void datafiles_read_directories(char *path_str,
|
||||
datafile_loader_t loader_func,
|
||||
int flags);
|
||||
void datafiles_read_directories (gchar *path_str,
|
||||
GimpDataFileLoaderFunc loader_func,
|
||||
gint flags);
|
||||
|
||||
/* Return the current datafiles access, modification
|
||||
* or change time. The current datafile is the one for
|
||||
* which the "datafile_loader_t" function has been called
|
||||
* which the "DataFileLoaderFunc" function has been called
|
||||
* on.
|
||||
*/
|
||||
time_t datafile_atime (void);
|
||||
time_t datafile_mtime (void);
|
||||
time_t datafile_ctime (void);
|
||||
|
||||
|
||||
#endif
|
||||
#endif /* __DATAFILES_H__ */
|
||||
|
|
|
@ -22,6 +22,12 @@
|
|||
|
||||
#include <glib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "gimpenv.h"
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
|
@ -240,6 +246,196 @@ gimp_gtkrc (void)
|
|||
return gimp_gtkrc_filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_parse:
|
||||
* @path: A list of directories separated by #G_SEARCHPATH_SEPARATOR.
|
||||
* @max_path: The maximum number of directories to return.
|
||||
* @check: #TRUE if you want the directories to be checked.
|
||||
* @not_found: #
|
||||
*
|
||||
* Return: A list of all directories in @path.
|
||||
*
|
||||
*/
|
||||
GList *
|
||||
gimp_path_parse (gchar *path,
|
||||
gint max_paths,
|
||||
gboolean check,
|
||||
GList **check_failed)
|
||||
{
|
||||
gchar *home;
|
||||
gchar **patharray;
|
||||
GList *list = NULL;
|
||||
GList *fail_list = NULL;
|
||||
gint i;
|
||||
|
||||
struct stat filestat;
|
||||
gint err = FALSE;
|
||||
|
||||
if (!path || !*path || max_paths < 1 || max_paths > 256)
|
||||
return NULL;
|
||||
|
||||
home = g_get_home_dir ();
|
||||
|
||||
patharray = g_strsplit (path, G_SEARCHPATH_SEPARATOR_S, max_paths);
|
||||
|
||||
for (i = 0; i < max_paths; i++)
|
||||
{
|
||||
GString *dir;
|
||||
|
||||
if (!patharray[i])
|
||||
break;
|
||||
|
||||
if (*patharray[i] == '~')
|
||||
{
|
||||
dir = g_string_new (home);
|
||||
g_string_append (dir, patharray[i] + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
dir = g_string_new (patharray[i]);
|
||||
}
|
||||
|
||||
#ifdef __EMX__
|
||||
_fnslashify (dir);
|
||||
#endif
|
||||
|
||||
if (check)
|
||||
{
|
||||
/* check if directory exists */
|
||||
err = stat (dir->str, &filestat);
|
||||
|
||||
if (!err && S_ISDIR (filestat.st_mode))
|
||||
{
|
||||
if (dir->str[dir->len - 1] != G_DIR_SEPARATOR)
|
||||
g_string_append_c (dir, G_DIR_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
if (!err)
|
||||
list = g_list_prepend (list, dir->str);
|
||||
else if (check_failed)
|
||||
fail_list = g_list_prepend (fail_list, dir->str);
|
||||
|
||||
g_string_free (dir, FALSE);
|
||||
}
|
||||
|
||||
g_strfreev (patharray);
|
||||
|
||||
list = g_list_reverse (list);
|
||||
|
||||
if (check && check_failed)
|
||||
{
|
||||
fail_list = g_list_reverse (fail_list);
|
||||
*check_failed = fail_list;
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_to_str:
|
||||
* @path: A list of directories as returned by gimp_path_parse().
|
||||
*
|
||||
* Returns: A searchpath string separated by #G_SEARCHPATH_SEPARATOR.
|
||||
*
|
||||
*/
|
||||
gchar *
|
||||
gimp_path_to_str (GList *path)
|
||||
{
|
||||
GString *str = NULL;
|
||||
GList *list;
|
||||
gchar *retval = NULL;
|
||||
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
if (str)
|
||||
{
|
||||
g_string_append_c (str, G_SEARCHPATH_SEPARATOR);
|
||||
g_string_append (str, (gchar *) list->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
str = g_string_new ((gchar *) list->data);
|
||||
}
|
||||
}
|
||||
|
||||
if (str)
|
||||
{
|
||||
retval = str->str;
|
||||
g_string_free (str, FALSE);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_free:
|
||||
* @path: A list of directories as returned by gimp_path_parse().
|
||||
*
|
||||
* This function frees the memory allocated for the list and it's strings.
|
||||
*
|
||||
*/
|
||||
void
|
||||
gimp_path_free (GList *path)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
if (path)
|
||||
{
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
g_free (list->data);
|
||||
}
|
||||
|
||||
g_list_free (path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_path_get_user_writable_dir:
|
||||
* @path: A list of directories as returned by gimp_path_parse().
|
||||
*
|
||||
* Returns: The first directory in @path where the user has write permission.
|
||||
*
|
||||
*/
|
||||
gchar *
|
||||
gimp_path_get_user_writable_dir (GList *path)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
uid_t euid;
|
||||
gid_t egid;
|
||||
|
||||
struct stat filestat;
|
||||
gint err;
|
||||
|
||||
euid = geteuid ();
|
||||
egid = getegid ();
|
||||
|
||||
for (list = path; list; list = g_list_next (list))
|
||||
{
|
||||
/* check if directory exists */
|
||||
err = stat ((gchar *) list->data, &filestat);
|
||||
|
||||
/* this is tricky:
|
||||
* if a file is e.g. owned by the current user but not user-writable,
|
||||
* the user has no permission to write to the file regardless
|
||||
* of his group's or other's write permissions
|
||||
*/
|
||||
if (!err && S_ISDIR (filestat.st_mode) &&
|
||||
|
||||
((filestat.st_mode & S_IWUSR) ||
|
||||
|
||||
((filestat.st_mode & S_IWGRP) &&
|
||||
(euid != filestat.st_uid)) ||
|
||||
|
||||
((filestat.st_mode & S_IWOTH) &&
|
||||
(euid != filestat.st_uid) &&
|
||||
(egid != filestat.st_gid))))
|
||||
{
|
||||
return (gchar *) list->data;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -27,10 +27,19 @@ extern "C" {
|
|||
|
||||
/* For information look into the C source or the html documentation */
|
||||
|
||||
gchar* gimp_directory (void);
|
||||
gchar* gimp_personal_rc_file (gchar *basename);
|
||||
gchar* gimp_data_directory (void);
|
||||
gchar* gimp_gtkrc (void);
|
||||
gchar * gimp_directory (void);
|
||||
gchar * gimp_personal_rc_file (gchar *basename);
|
||||
gchar * gimp_data_directory (void);
|
||||
gchar * gimp_gtkrc (void);
|
||||
|
||||
GList * gimp_path_parse (gchar *path,
|
||||
gint max_paths,
|
||||
gboolean check,
|
||||
GList **check_failed);
|
||||
gchar * gimp_path_to_str (GList *path);
|
||||
void gimp_path_free (GList *path);
|
||||
|
||||
gchar * gimp_path_get_user_writable_dir (GList *path);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ gimp_pixmap_new (gchar **xpm_data)
|
|||
}
|
||||
|
||||
/**
|
||||
* gimp_pixmap_new:
|
||||
* gimp_pixmap_set:
|
||||
* @pixmap: The pixmap widget you want to set the new xpm_data for.
|
||||
* @xpm_data: A pointer to a XPM data structure as found in XPM files.
|
||||
*
|
||||
|
|
|
@ -1718,24 +1718,30 @@ create_file_selection (void)
|
|||
"clicked",
|
||||
GTK_SIGNAL_FUNC (file_selection_ok),
|
||||
(gpointer) window);
|
||||
gimp_help_set_help_data (GTK_FILE_SELECTION(window)->ok_button, _("Click here to save your file"), NULL);
|
||||
gimp_help_set_help_data (GTK_FILE_SELECTION(window)->ok_button,
|
||||
_("Click here to save your file"), NULL);
|
||||
|
||||
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(window)->cancel_button),
|
||||
"clicked",
|
||||
GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||
GTK_OBJECT (window));
|
||||
gimp_help_set_help_data (GTK_FILE_SELECTION(window)->cancel_button, _("Click here to cancel save procedure"), NULL);
|
||||
gimp_help_set_help_data (GTK_FILE_SELECTION (window)->cancel_button,
|
||||
_("Click here to cancel save procedure"), NULL);
|
||||
}
|
||||
if (tpath)
|
||||
{
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window), tpath);
|
||||
}
|
||||
else if(fractalexplorer_path_list)
|
||||
else if (fractalexplorer_path_list)
|
||||
{
|
||||
/* Last path is where usually saved to */
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window),
|
||||
g_list_nth (fractalexplorer_path_list,
|
||||
g_list_length (fractalexplorer_path_list)-1)->data);
|
||||
gchar *dir;
|
||||
|
||||
dir = gimp_path_get_user_writable_dir (fractalexplorer_path_list);
|
||||
|
||||
if (!dir)
|
||||
dir = gimp_directory ();
|
||||
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window), dir);
|
||||
}
|
||||
else
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window),"/tmp");
|
||||
|
|
|
@ -1135,17 +1135,11 @@ plug_in_parse_fractalexplorer_path (void)
|
|||
{
|
||||
GParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gchar *path_string;
|
||||
gchar *home;
|
||||
gchar *path;
|
||||
gchar *token;
|
||||
gchar *next_token;
|
||||
struct stat filestat;
|
||||
gint err;
|
||||
|
||||
if(fractalexplorer_path_list)
|
||||
g_list_free(fractalexplorer_path_list);
|
||||
|
||||
|
||||
GList *fail_list = NULL;
|
||||
GList *list;
|
||||
|
||||
gimp_path_free (fractalexplorer_path_list);
|
||||
fractalexplorer_path_list = NULL;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_gimprc_query",
|
||||
|
@ -1164,52 +1158,28 @@ plug_in_parse_fractalexplorer_path (void)
|
|||
return;
|
||||
}
|
||||
|
||||
path_string = g_strdup (return_vals[1].data.d_string);
|
||||
fractalexplorer_path_list = gimp_path_parse (return_vals[1].data.d_string,
|
||||
16, TRUE, &fail_list);
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
/* Set local path to contain temp_path, where (supposedly)
|
||||
* there may be working files.
|
||||
*/
|
||||
home = g_get_home_dir ();
|
||||
|
||||
/* Search through all directories in the path */
|
||||
|
||||
next_token = path_string;
|
||||
token = strtok (next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
|
||||
while (token)
|
||||
if (fail_list)
|
||||
{
|
||||
if (*token == '\0')
|
||||
{
|
||||
token = strtok (NULL, G_SEARCHPATH_SEPARATOR_S);
|
||||
continue;
|
||||
}
|
||||
GString *err =
|
||||
g_string_new (_("fractalexplorer-path misconfigured - "
|
||||
"the following directories were not found"));
|
||||
|
||||
if (*token == '~')
|
||||
{
|
||||
path = g_strdup_printf ("%s%s", home, token + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = g_strdup (token);
|
||||
} /* else */
|
||||
for (list = fail_list; list; list = g_list_next (list))
|
||||
{
|
||||
g_string_append_c (err, '\n');
|
||||
g_string_append (err, (gchar *) list->data);
|
||||
}
|
||||
|
||||
/* Check if directory exists */
|
||||
err = stat (path, &filestat);
|
||||
g_message (err->str);
|
||||
|
||||
if (!err && S_ISDIR (filestat.st_mode))
|
||||
{
|
||||
fractalexplorer_path_list = g_list_append (fractalexplorer_path_list, path);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_message (_("fractalexplorer-path misconfigured\nPath "
|
||||
"\"%s\" not found."), path);
|
||||
g_free (path);
|
||||
}
|
||||
token = strtok (NULL, G_SEARCHPATH_SEPARATOR_S);
|
||||
g_string_free (err, TRUE);
|
||||
gimp_path_free (fail_list);
|
||||
}
|
||||
g_free (path_string);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1448,17 +1418,11 @@ fractalexplorer_rescan_ok_callback (GtkWidget *widget,
|
|||
gpointer data)
|
||||
{
|
||||
GtkWidget *patheditor;
|
||||
GList *list;
|
||||
gchar *raw_path;
|
||||
gchar **path;
|
||||
gint i;
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (data), FALSE);
|
||||
|
||||
for (list = fractalexplorer_path_list; list; list = g_list_next (list))
|
||||
g_free (list->data);
|
||||
|
||||
g_list_free (fractalexplorer_path_list);
|
||||
gimp_path_free (fractalexplorer_path_list);
|
||||
fractalexplorer_path_list = NULL;
|
||||
|
||||
patheditor = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (data),
|
||||
|
@ -1466,18 +1430,9 @@ fractalexplorer_rescan_ok_callback (GtkWidget *widget,
|
|||
|
||||
raw_path = gimp_path_editor_get_path (GIMP_PATH_EDITOR (patheditor));
|
||||
|
||||
path = g_strsplit (raw_path, ":", 16);
|
||||
fractalexplorer_path_list = gimp_path_parse (raw_path, 16, FALSE, NULL);
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
if (!path[i])
|
||||
break;
|
||||
|
||||
fractalexplorer_path_list = g_list_append (fractalexplorer_path_list,
|
||||
g_strdup (path[i]));
|
||||
}
|
||||
|
||||
g_strfreev (path);
|
||||
g_free (raw_path);
|
||||
|
||||
if (fractalexplorer_path_list)
|
||||
{
|
||||
|
@ -1496,8 +1451,7 @@ fractalexplorer_rescan_list (void)
|
|||
static GtkWidget *dlg = NULL;
|
||||
|
||||
GtkWidget *patheditor;
|
||||
GString *path = NULL;
|
||||
GList *list;
|
||||
gchar *path;
|
||||
|
||||
if (dlg)
|
||||
{
|
||||
|
@ -1522,26 +1476,15 @@ fractalexplorer_rescan_list (void)
|
|||
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
|
||||
&dlg);
|
||||
|
||||
for (list = fractalexplorer_path_list; list; list = g_list_next (list))
|
||||
{
|
||||
if (path == NULL)
|
||||
{
|
||||
path = g_string_new (list->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_string_append_c (path, G_SEARCHPATH_SEPARATOR);
|
||||
g_string_append (path, list->data);
|
||||
}
|
||||
}
|
||||
path = gimp_path_to_str (fractalexplorer_path_list);
|
||||
|
||||
patheditor = gimp_path_editor_new (_("Add FractalExplorer Path"), path->str);
|
||||
patheditor = gimp_path_editor_new (_("Add FractalExplorer Path"), path);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (patheditor), 6);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), patheditor,
|
||||
TRUE, TRUE, 0);
|
||||
gtk_widget_show (patheditor);
|
||||
|
||||
g_string_free (path, TRUE);
|
||||
g_free (path);
|
||||
|
||||
gtk_object_set_data (GTK_OBJECT (dlg), "patheditor", patheditor);
|
||||
|
||||
|
|
|
@ -134,7 +134,6 @@ static GtkWidget *gfig_preview;
|
|||
static GtkWidget *pic_preview;
|
||||
static GtkWidget *gfig_gtk_list;
|
||||
static gint gfig_preview_exp_id;
|
||||
static GdkPixmap *gfig_pixmap;
|
||||
static gint32 gfig_image;
|
||||
static gint32 gfig_drawable;
|
||||
static GtkWidget *brush_page_pw;
|
||||
|
@ -818,9 +817,7 @@ gfig_clear_selection (gint32 image_ID)
|
|||
}
|
||||
|
||||
/*
|
||||
* Query gimprc for gfig-path, and parse it.
|
||||
* This code is based on script_fu_find_scripts ()
|
||||
* and the Gflare plugin.
|
||||
* Query gimprc for gfig-path, and parse it.
|
||||
*/
|
||||
|
||||
static void
|
||||
|
@ -828,16 +825,12 @@ plug_in_parse_gfig_path (void)
|
|||
{
|
||||
GParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gchar *path_string;
|
||||
gchar *home;
|
||||
gchar *path;
|
||||
gchar *token;
|
||||
gchar *next_token;
|
||||
struct stat filestat;
|
||||
gint err;
|
||||
|
||||
GList *fail_list = NULL;
|
||||
GList *list;
|
||||
|
||||
if (gfig_path_list)
|
||||
g_list_free (gfig_path_list);
|
||||
gimp_path_free (gfig_path_list);
|
||||
|
||||
gfig_path_list = NULL;
|
||||
|
||||
|
@ -849,7 +842,7 @@ plug_in_parse_gfig_path (void)
|
|||
if (return_vals[0].data.d_status != STATUS_SUCCESS ||
|
||||
return_vals[1].data.d_string == NULL)
|
||||
{
|
||||
g_message ("No gfig-path in gimprc: gfig_path_list is NULL\n\n"
|
||||
g_message ("No gfig-path in gimprc:\n\n"
|
||||
"You need to add an entry like\n"
|
||||
"(gfig-path \"${gimp_dir}/gfig:${gimp_data_dir}/gfig\n"
|
||||
"to your ~/.gimp/gimprc file\n");
|
||||
|
@ -857,63 +850,28 @@ plug_in_parse_gfig_path (void)
|
|||
return;
|
||||
}
|
||||
|
||||
path_string = g_strdup (return_vals[1].data.d_string);
|
||||
gfig_path_list = gimp_path_parse (return_vals[1].data.d_string,
|
||||
16, TRUE, &fail_list);
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
/* Set local path to contain temp_path, where (supposedly)
|
||||
* there may be working files.
|
||||
*/
|
||||
home = g_get_home_dir ();
|
||||
|
||||
/* Search through all directories in the path */
|
||||
|
||||
next_token = path_string;
|
||||
token = strtok (next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
|
||||
while (token)
|
||||
if (fail_list)
|
||||
{
|
||||
if (*token == '\0')
|
||||
GString *err =
|
||||
g_string_new (_("gfig-path misconfigured - "
|
||||
"the following directories were not found"));
|
||||
|
||||
for (list = fail_list; list; list = g_list_next (list))
|
||||
{
|
||||
token = strtok (NULL, G_SEARCHPATH_SEPARATOR_S);
|
||||
continue;
|
||||
g_string_append_c (err, '\n');
|
||||
g_string_append (err, (gchar *) list->data);
|
||||
}
|
||||
|
||||
if (*token == '~')
|
||||
{
|
||||
path = g_malloc (strlen (home) + strlen (token) + 2);
|
||||
sprintf (path, "%s%s", home, token + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = g_malloc (strlen (token) + 2);
|
||||
strcpy (path, token);
|
||||
} /* else */
|
||||
#ifdef __EMX__
|
||||
_fnslashify (path);
|
||||
#endif
|
||||
g_message (err->str);
|
||||
|
||||
/* Check if directory exists */
|
||||
err = stat (path, &filestat);
|
||||
|
||||
if (!err && S_ISDIR (filestat.st_mode))
|
||||
{
|
||||
if (path[strlen (path) - 1] != G_DIR_SEPARATOR)
|
||||
strcat (path, G_DIR_SEPARATOR_S);
|
||||
|
||||
#ifdef DEBUG
|
||||
printf ("Added `%s' to gfig_path_list\n", path);
|
||||
#endif /* DEBUG */
|
||||
gfig_path_list = g_list_append (gfig_path_list, path);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_message ("gfig-path misconfigured - \nPath `%.100s' not found\n",
|
||||
path);
|
||||
}
|
||||
token = strtok (NULL, G_SEARCHPATH_SEPARATOR_S);
|
||||
g_string_free (err, TRUE);
|
||||
gimp_path_free (fail_list);
|
||||
}
|
||||
|
||||
g_free (path_string);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1640,15 +1598,17 @@ create_file_selection (GFigObj *obj,
|
|||
{
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window), tpath);
|
||||
}
|
||||
else
|
||||
/* Last path is where usually saved to */
|
||||
if (gfig_path_list)
|
||||
{
|
||||
gtk_file_selection_set_filename
|
||||
(GTK_FILE_SELECTION (window),
|
||||
g_list_nth (gfig_path_list,
|
||||
g_list_length (gfig_path_list) - 1)->data);
|
||||
}
|
||||
else if (gfig_path_list)
|
||||
{
|
||||
gchar *dir;
|
||||
|
||||
dir = gimp_path_get_user_writable_dir (gfig_path_list);
|
||||
|
||||
if (!dir)
|
||||
dir = gimp_directory ();
|
||||
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window), dir);
|
||||
}
|
||||
else
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION (window), "/tmp");
|
||||
|
||||
|
@ -4523,17 +4483,11 @@ gfig_rescan_ok_callback (GtkWidget *widget,
|
|||
gpointer data)
|
||||
{
|
||||
GtkWidget *patheditor;
|
||||
GList *list;
|
||||
gchar *raw_path;
|
||||
gchar **path;
|
||||
gint i;
|
||||
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (data), FALSE);
|
||||
|
||||
for (list = gfig_path_list; list; list = g_list_next (list))
|
||||
g_free (list->data);
|
||||
|
||||
g_list_free (gfig_path_list);
|
||||
gimp_path_free (gfig_path_list);
|
||||
gfig_path_list = NULL;
|
||||
|
||||
patheditor = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (data),
|
||||
|
@ -4541,17 +4495,9 @@ gfig_rescan_ok_callback (GtkWidget *widget,
|
|||
|
||||
raw_path = gimp_path_editor_get_path (GIMP_PATH_EDITOR (patheditor));
|
||||
|
||||
path = g_strsplit (raw_path, ":", 16);
|
||||
gfig_path_list = gimp_path_parse (raw_path, 16, FALSE, NULL);
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
if (!path[i])
|
||||
break;
|
||||
|
||||
gfig_path_list = g_list_append (gfig_path_list, g_strdup (path[i]));
|
||||
}
|
||||
|
||||
g_strfreev (path);
|
||||
g_free (raw_path);
|
||||
|
||||
if (gfig_path_list)
|
||||
{
|
||||
|
@ -4570,8 +4516,7 @@ gfig_rescan_list (void)
|
|||
static GtkWidget *dlg = NULL;
|
||||
|
||||
GtkWidget *patheditor;
|
||||
GString *path = NULL;
|
||||
GList *list;
|
||||
gchar *path;
|
||||
|
||||
if (dlg)
|
||||
{
|
||||
|
@ -4596,26 +4541,15 @@ gfig_rescan_list (void)
|
|||
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
|
||||
&dlg);
|
||||
|
||||
for (list = gfig_path_list; list; list = g_list_next (list))
|
||||
{
|
||||
if (path == NULL)
|
||||
{
|
||||
path = g_string_new (list->data);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_string_append_c (path, G_SEARCHPATH_SEPARATOR);
|
||||
g_string_append (path, list->data);
|
||||
}
|
||||
}
|
||||
path = gimp_path_to_str (gfig_path_list);
|
||||
|
||||
patheditor = gimp_path_editor_new (_("Add Gfig Path"), path->str);
|
||||
patheditor = gimp_path_editor_new (_("Add Gfig Path"), path);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (patheditor), 6);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), patheditor,
|
||||
TRUE, TRUE, 0);
|
||||
gtk_widget_show (patheditor);
|
||||
|
||||
g_string_free (path, TRUE);
|
||||
g_free (path);
|
||||
|
||||
gtk_object_set_data (GTK_OBJECT (dlg), "patheditor", patheditor);
|
||||
|
||||
|
|
|
@ -599,7 +599,7 @@ static GFlareDialog *dlg = NULL;
|
|||
static GFlareEditor *ed = NULL;
|
||||
static GList *gflares_list = NULL;
|
||||
static gint num_gflares = 0;
|
||||
GList *gflare_path_list;
|
||||
static GList *gflare_path_list = NULL;
|
||||
static CalcParams calc;
|
||||
static GList *gradient_menus;
|
||||
static gchar **gradient_names = NULL;
|
||||
|
@ -967,14 +967,11 @@ plug_in_parse_gflare_path (void)
|
|||
{
|
||||
GParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
gchar *path_string;
|
||||
gchar *home;
|
||||
gchar *path;
|
||||
gchar *token;
|
||||
gchar *next_token;
|
||||
struct stat filestat;
|
||||
gint err;
|
||||
|
||||
GList *fail_list = NULL;
|
||||
GList *list;
|
||||
|
||||
gimp_path_free (gflare_path_list);
|
||||
gflare_path_list = NULL;
|
||||
|
||||
return_vals = gimp_run_procedure ("gimp_gimprc_query",
|
||||
|
@ -982,62 +979,40 @@ plug_in_parse_gflare_path (void)
|
|||
PARAM_STRING, "gflare-path",
|
||||
PARAM_END);
|
||||
|
||||
if (return_vals[0].data.d_status != STATUS_SUCCESS || return_vals[1].data.d_string == NULL)
|
||||
if (return_vals[0].data.d_status != STATUS_SUCCESS ||
|
||||
return_vals[1].data.d_string == NULL)
|
||||
{
|
||||
DEBUG_PRINT ("No gflare-path in gimprc: gflare_path_list is NULL\n");
|
||||
g_message ("No gflare-path in gimprc:\n\n"
|
||||
"You need to add an entry like\n"
|
||||
"(gfig-path \"${gimp_dir}/gfig:${gimp_data_dir}/gfig\n"
|
||||
"to your ~/.gimp/gimprc file\n");
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
return;
|
||||
}
|
||||
|
||||
path_string = g_strdup (return_vals[1].data.d_string);
|
||||
|
||||
gflare_path_list = gimp_path_parse (return_vals[1].data.d_string,
|
||||
16, TRUE, &fail_list);
|
||||
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
|
||||
home = g_get_home_dir ();
|
||||
|
||||
/* Search through all directories in the path */
|
||||
|
||||
next_token = path_string;
|
||||
token = strtok (next_token, G_SEARCHPATH_SEPARATOR_S);
|
||||
|
||||
while (token)
|
||||
if (fail_list)
|
||||
{
|
||||
if (*token == '\0')
|
||||
{
|
||||
token = strtok (NULL, G_SEARCHPATH_SEPARATOR_S);
|
||||
continue;
|
||||
}
|
||||
GString *err =
|
||||
g_string_new (_("gflare-path misconfigured - "
|
||||
"the following directories were not found"));
|
||||
|
||||
if (*token == '~')
|
||||
{
|
||||
path = g_malloc (strlen (home) + strlen (token) + 2);
|
||||
sprintf (path, "%s%s", home, token + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = g_malloc (strlen (token) + 2);
|
||||
strcpy (path, token);
|
||||
} /* else */
|
||||
for (list = fail_list; list; list = g_list_next (list))
|
||||
{
|
||||
g_string_append_c (err, '\n');
|
||||
g_string_append (err, (gchar *) list->data);
|
||||
}
|
||||
|
||||
/* Check if directory exists */
|
||||
err = stat (path, &filestat);
|
||||
g_message (err->str);
|
||||
|
||||
if (!err && S_ISDIR (filestat.st_mode))
|
||||
{
|
||||
if (path[strlen (path) - 1] != G_DIR_SEPARATOR)
|
||||
strcat (path, G_DIR_SEPARATOR_S);
|
||||
|
||||
DEBUG_PRINT(("Added `%s' to gflare_path_list\n", path));
|
||||
gflare_path_list = g_list_append (gflare_path_list, path);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_PRINT(("Not found `%s'\n", path));
|
||||
g_free (path);
|
||||
}
|
||||
token = strtok (NULL, G_SEARCHPATH_SEPARATOR_S);
|
||||
g_string_free (err, TRUE);
|
||||
gimp_path_free (fail_list);
|
||||
}
|
||||
g_free (path_string);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1548,14 +1523,12 @@ gflare_save (GFlare *gflare)
|
|||
if (gflare_path_list == NULL)
|
||||
{
|
||||
if (!message_ok)
|
||||
g_message (message,
|
||||
gflare->name);
|
||||
g_message (message, gflare->name);
|
||||
message_ok = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
/* get first entry of path */
|
||||
path = gflare_path_list->data;
|
||||
path = gimp_path_get_user_writable_dir (gflare_path_list);
|
||||
|
||||
gflare->filename = g_strdup_printf ("%s%s", path, gflare->name);
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include "ppmtool.h"
|
||||
#include <libgimp/gimp.h>
|
||||
#include <libgimp/stdplugins-intl.h>
|
||||
/* #include <libgimp/gimpenv.h> */
|
||||
|
||||
#ifndef GIMP_CHECK_VERSION
|
||||
#define GIMP_CHECK_VERSION(a,b,c) 0
|
||||
|
@ -40,15 +39,16 @@ GtkTooltips *tooltips = NULL;
|
|||
struct ppm infile = {0,0,NULL};
|
||||
struct ppm inalpha = {0,0,NULL};
|
||||
|
||||
GList *parsepath(void)
|
||||
GList * parsepath (void)
|
||||
{
|
||||
GParam *return_vals;
|
||||
gint nreturn_vals;
|
||||
static GList *lastpath = NULL;
|
||||
char *gimpdatasubdir, *defaultpath, *tmps, *lastchr;
|
||||
gchar *gimpdatasubdir, *defaultpath, *tmps;
|
||||
struct stat st;
|
||||
|
||||
if(lastpath) return lastpath;
|
||||
if (lastpath)
|
||||
return lastpath;
|
||||
|
||||
#if GIMP_CHECK_VERSION(1, 1, 0)
|
||||
gimpdatasubdir = g_strconcat (gimp_data_directory (),
|
||||
|
@ -68,54 +68,46 @@ GList *parsepath(void)
|
|||
gimpdatasubdir = strchr (defaultpath, ':') + 1;
|
||||
#endif
|
||||
|
||||
if(standalone)
|
||||
tmps = g_strdup(defaultpath);
|
||||
else {
|
||||
return_vals = gimp_run_procedure ("gimp_gimprc_query", &nreturn_vals,
|
||||
PARAM_STRING, "gimpressionist-path",
|
||||
PARAM_END);
|
||||
if(return_vals[0].data.d_status != STATUS_SUCCESS ||
|
||||
return_vals[1].data.d_string == NULL) {
|
||||
if (stat (gimpdatasubdir, &st) != 0
|
||||
|| !S_ISDIR(st.st_mode)) {
|
||||
/* No gimpressionist-path parameter, and the default doesn't exist */
|
||||
#if GIMP_CHECK_VERSION(1, 1, 0)
|
||||
g_message( "*** Warning ***\n"
|
||||
"It is highly recommended to add\n"
|
||||
" (gimpressionist-path \"${gimp_dir}" G_DIR_SEPARATOR_S "gimpressionist"
|
||||
G_SEARCHPATH_SEPARATOR_S
|
||||
"${gimp_data_dir}" G_DIR_SEPARATOR_S "gimpressionist\")\n"
|
||||
"(or similar) to your gimprc file.\n");
|
||||
#else
|
||||
g_message( _("*** Warning ***\nIt is highly recommended to add\n (gimpressionist-path \"%s\")\n(or similar) to your gimprc file.\n"), defaultpath);
|
||||
#endif
|
||||
}
|
||||
tmps = g_strdup(defaultpath);
|
||||
} else {
|
||||
tmps = g_strdup(return_vals[1].data.d_string);
|
||||
}
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
}
|
||||
if (standalone)
|
||||
tmps = g_strdup (defaultpath);
|
||||
else
|
||||
{
|
||||
return_vals = gimp_run_procedure ("gimp_gimprc_query", &nreturn_vals,
|
||||
PARAM_STRING, "gimpressionist-path",
|
||||
PARAM_END);
|
||||
|
||||
for(;;) {
|
||||
lastchr = strchr(tmps, G_SEARCHPATH_SEPARATOR);
|
||||
if(lastchr) *lastchr = '\0';
|
||||
if(*tmps == '~') {
|
||||
char *tmps2, *home;
|
||||
home = g_get_home_dir ();
|
||||
if(!home) {
|
||||
g_message( _("*** Warning ***\nNo home directory!\n"));
|
||||
home = "";
|
||||
}
|
||||
tmps2 = g_strconcat(home, tmps + 1, NULL);
|
||||
tmps = tmps2;
|
||||
if (return_vals[0].data.d_status != STATUS_SUCCESS ||
|
||||
return_vals[1].data.d_string == NULL)
|
||||
{
|
||||
if (stat (gimpdatasubdir, &st) != 0
|
||||
|| !S_ISDIR(st.st_mode))
|
||||
{
|
||||
/* No gimpressionist-path parameter,
|
||||
* and the default doesn't exist */
|
||||
#if GIMP_CHECK_VERSION(1, 1, 0)
|
||||
g_message( "*** Warning ***\n"
|
||||
"It is highly recommended to add\n"
|
||||
" (gimpressionist-path \"${gimp_dir}" G_DIR_SEPARATOR_S "gimpressionist"
|
||||
G_SEARCHPATH_SEPARATOR_S
|
||||
"${gimp_data_dir}" G_DIR_SEPARATOR_S "gimpressionist\")\n"
|
||||
"(or similar) to your gimprc file.\n");
|
||||
#else
|
||||
g_message( _("*** Warning ***\nIt is highly recommended to add\n (gimpressionist-path \"%s\")\n(or similar) to your gimprc file.\n"), defaultpath);
|
||||
#endif
|
||||
}
|
||||
tmps = g_strdup (defaultpath);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmps = g_strdup (return_vals[1].data.d_string);
|
||||
}
|
||||
gimp_destroy_params (return_vals, nreturn_vals);
|
||||
}
|
||||
lastpath = g_list_append(lastpath, tmps);
|
||||
if(lastchr)
|
||||
tmps = lastchr + 1;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
lastpath = gimp_path_parse (tmps, 16, FALSE, NULL);
|
||||
|
||||
g_free (tmps);
|
||||
|
||||
return lastpath;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue