45
45
#include "gimp-intl.h"
47
/* Need this test somewhere, might as well do it here */
49
#if GLIB_CHECK_VERSION (2,6,0)
50
#error GIMP 2.2 for Win32 must be compiled against GLib 2.4
61
static void gimp_data_class_init (GimpDataClass *klass);
62
static void gimp_data_init (GimpData *data,
63
GimpDataClass *data_class);
65
static void gimp_data_finalize (GObject *object);
67
static void gimp_data_name_changed (GimpObject *object);
68
static gint64 gimp_data_get_memsize (GimpObject *object,
71
static void gimp_data_real_dirty (GimpData *data);
64
static void gimp_data_class_init (GimpDataClass *klass);
65
static void gimp_data_init (GimpData *data,
66
GimpDataClass *data_class);
68
static GObject * gimp_data_constructor (GType type,
70
GObjectConstructParam *params);
72
static void gimp_data_finalize (GObject *object);
73
static void gimp_data_set_property (GObject *object,
77
static void gimp_data_get_property (GObject *object,
82
static gint64 gimp_data_get_memsize (GimpObject *object,
85
static void gimp_data_real_dirty (GimpData *data);
74
88
static guint data_signals[LAST_SIGNAL] = { 0 };
121
135
gimp_marshal_VOID__VOID,
138
object_class->constructor = gimp_data_constructor;
124
139
object_class->finalize = gimp_data_finalize;
140
object_class->set_property = gimp_data_set_property;
141
object_class->get_property = gimp_data_get_property;
126
gimp_object_class->name_changed = gimp_data_name_changed;
127
143
gimp_object_class->get_memsize = gimp_data_get_memsize;
129
145
klass->dirty = gimp_data_real_dirty;
130
146
klass->save = NULL;
131
147
klass->get_extension = NULL;
132
148
klass->duplicate = NULL;
150
g_object_class_install_property (object_class, PROP_FILENAME,
151
g_param_spec_string ("filename", NULL, NULL,
153
GIMP_PARAM_READWRITE));
155
g_object_class_install_property (object_class, PROP_WRITABLE,
156
g_param_spec_boolean ("writable", NULL, NULL,
158
GIMP_PARAM_READWRITE));
160
g_object_class_install_property (object_class, PROP_DELETABLE,
161
g_param_spec_boolean ("deletable", NULL, NULL,
163
GIMP_PARAM_READWRITE));
165
g_object_class_install_property (object_class, PROP_MIME_TYPE,
166
g_param_spec_string ("mime-type", NULL, NULL,
168
GIMP_PARAM_READWRITE |
169
G_PARAM_CONSTRUCT_ONLY));
137
174
GimpDataClass *data_class)
139
176
data->filename = NULL;
140
178
data->writable = TRUE;
141
179
data->deletable = TRUE;
142
180
data->dirty = TRUE;
143
181
data->internal = FALSE;
144
182
data->freeze_count = 0;
146
185
/* look at the passed class pointer, not at GIMP_DATA_GET_CLASS(data)
147
186
* here, because the latter is always GimpDataClass itself
149
188
if (! data_class->save)
150
189
data->writable = FALSE;
191
/* freeze the data object during construction */
192
gimp_data_freeze (data);
168
gimp_data_name_changed (GimpObject *object)
170
if (GIMP_OBJECT_CLASS (parent_class)->name_changed)
171
GIMP_OBJECT_CLASS (parent_class)->name_changed (object);
173
gimp_data_dirty (GIMP_DATA (object));
210
gimp_data_set_property (GObject *object,
215
GimpData *data = GIMP_DATA (object);
220
gimp_data_set_filename (data,
221
g_value_get_string (value),
227
data->writable = g_value_get_boolean (value);
231
data->deletable = g_value_get_boolean (value);
235
if (g_value_get_string (value))
236
data->mime_type = g_quark_from_string (g_value_get_string (value));
242
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
248
gimp_data_get_property (GObject *object,
253
GimpData *data = GIMP_DATA (object);
258
g_value_set_string (value, data->filename);
262
g_value_set_boolean (value, data->writable);
266
g_value_set_boolean (value, data->deletable);
270
g_value_set_string (value, g_quark_to_string (data->mime_type));
274
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
280
gimp_data_constructor (GType type,
282
GObjectConstructParam *params)
286
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
288
gimp_data_thaw (GIMP_DATA (object));
314
440
if (data->internal)
317
if (unlink (data->filename) == -1)
443
if (g_unlink (data->filename) == -1)
319
445
g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_DELETE,
320
446
_("Could not delete '%s': %s"),
377
503
gchar *dirname = g_path_get_dirname (filename);
379
if ((access (filename, F_OK) == 0 && /* check if the file exists */
380
access (filename, W_OK) == 0) || /* and is writable */
381
(access (filename, F_OK) != 0 && /* OR doesn't exist */
382
access (dirname, W_OK) == 0)) /* and we can write to its dir */
505
if ((g_access (filename, F_OK) == 0 && /* check if the file exists */
506
g_access (filename, W_OK) == 0) || /* and is writable */
507
(g_access (filename, F_OK) != 0 && /* OR doesn't exist */
508
g_access (dirname, W_OK) == 0)) /* and we can write to its dir */
384
510
data->writable = writable ? TRUE : FALSE;
385
511
data->deletable = deletable ? TRUE : FALSE;
422
548
if (data->internal)
427
const gchar *charset;
429
filename = g_strdup (gimp_object_get_name (GIMP_OBJECT (data)));
431
/* Map illegal characters to '-' while the name is still in UTF-8 */
432
for (i = 0; filename[i]; i++)
433
if (strchr ("<>:\"/\\|", filename[i]) ||
434
g_ascii_iscntrl (filename[i]) ||
435
g_ascii_isspace (filename[i]))
438
/* Map also trailing periods to '-' */
439
for (i = strlen (filename) - 1; i >= 0; i--)
440
if (filename[i] == '.')
445
/* Next convert to the filename charset. Note that this branch of
446
* GIMP must be compiled against GLib 2.4 and we thus use system
447
* codepage for file names in the GLib API.
449
g_get_charset (&charset);
450
safename = g_convert_with_fallback (filename,
451
-1, charset, "UTF-8",
452
"-", NULL, NULL, &error);
455
g_warning ("gimp_data_create_filename:\n"
456
"g_convert_with_fallback() failed for '%s': %s",
457
filename, error->message);
459
g_error_free (error);
465
551
safename = g_filename_from_utf8 (gimp_object_get_name (GIMP_OBJECT (data)),
466
552
-1, NULL, NULL, &error);
508
593
g_free (fullpath);
597
gimp_data_get_mime_type (GimpData *data)
599
g_return_val_if_fail (GIMP_IS_DATA (data), NULL);
601
return g_quark_to_string (data->mime_type);
512
605
* gimp_data_duplicate:
513
* @data: a #GimpData object
514
* @stingy_memory_use: if %TRUE, use the disk rather than RAM
606
* @data: a #GimpData object
517
608
* Creates a copy of @data, if possible. Only the object data is
518
609
* copied: the newly created object is not automatically given an
521
612
* Returns: the newly created copy, or %NULL if @data cannot be copied.
524
gimp_data_duplicate (GimpData *data,
525
gboolean stingy_memory_use)
615
gimp_data_duplicate (GimpData *data)
527
617
g_return_val_if_fail (GIMP_IS_DATA (data), NULL);
529
619
if (GIMP_DATA_GET_CLASS (data)->duplicate)
530
return GIMP_DATA_GET_CLASS (data)->duplicate (data, stingy_memory_use);
620
return GIMP_DATA_GET_CLASS (data)->duplicate (data);