removed gimp_scanner_parse_string_list() since the format it read wasn't
2003-03-10 Sven Neumann <sven@gimp.org> * app/config/gimpscanner.[ch]: removed gimp_scanner_parse_string_list() since the format it read wasn't proper s-expressions syntax. * app/config/gimpconfigwriter.c: a couple of minor cleanups. * app/gui/color-history.[ch] * app/gui/session.c * app/widgets/gimpdialogfactory.[ch]: use GimpConfigWriter to write the sessionrc. Had to do some minor changes to the file format.
This commit is contained in:

committed by
Sven Neumann

parent
a85179e735
commit
3ab2e64809
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
2003-03-10 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
|
* app/config/gimpscanner.[ch]: removed gimp_scanner_parse_string_list()
|
||||||
|
since the format it read wasn't proper s-expressions syntax.
|
||||||
|
|
||||||
|
* app/config/gimpconfigwriter.c: a couple of minor cleanups.
|
||||||
|
|
||||||
|
* app/gui/color-history.[ch]
|
||||||
|
* app/gui/session.c
|
||||||
|
* app/widgets/gimpdialogfactory.[ch]: use GimpConfigWriter to
|
||||||
|
write the sessionrc. Had to do some minor changes to the file
|
||||||
|
format.
|
||||||
|
|
||||||
2003-03-10 Michael Natterer <mitch@gimp.org>
|
2003-03-10 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* app/core/gimppalette.[ch]: added GimpData::duplicate()
|
* app/core/gimppalette.[ch]: added GimpData::duplicate()
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
@ -128,6 +129,7 @@ gimp_config_writer_open (GimpConfigWriter *writer,
|
|||||||
const gchar *name)
|
const gchar *name)
|
||||||
{
|
{
|
||||||
g_return_if_fail (writer != NULL);
|
g_return_if_fail (writer != NULL);
|
||||||
|
g_return_if_fail (name != NULL);
|
||||||
|
|
||||||
if (writer->error)
|
if (writer->error)
|
||||||
return;
|
return;
|
||||||
@ -160,9 +162,11 @@ gimp_config_writer_print (GimpConfigWriter *writer,
|
|||||||
if (len < 0)
|
if (len < 0)
|
||||||
len = strlen (string);
|
len = strlen (string);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
g_string_append_c (writer->buffer, ' ');
|
g_string_append_c (writer->buffer, ' ');
|
||||||
|
|
||||||
g_string_append_len (writer->buffer, string, len);
|
g_string_append_len (writer->buffer, string, len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -179,12 +183,11 @@ gimp_config_writer_printf (GimpConfigWriter *writer,
|
|||||||
if (writer->error)
|
if (writer->error)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_string_append_c (writer->buffer, ' ');
|
|
||||||
|
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
buffer = g_strdup_vprintf (format, args);
|
buffer = g_strdup_vprintf (format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
|
g_string_append_c (writer->buffer, ' ');
|
||||||
g_string_append (writer->buffer, buffer);
|
g_string_append (writer->buffer, buffer);
|
||||||
|
|
||||||
g_free (buffer);
|
g_free (buffer);
|
||||||
@ -245,7 +248,8 @@ gimp_config_writer_close (GimpConfigWriter *writer)
|
|||||||
g_string_append_c (writer->buffer, '\n');
|
g_string_append_c (writer->buffer, '\n');
|
||||||
|
|
||||||
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
||||||
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
g_set_error (&writer->error,
|
||||||
|
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
|
|
||||||
g_string_truncate (writer->buffer, 0);
|
g_string_truncate (writer->buffer, 0);
|
||||||
@ -301,7 +305,8 @@ gimp_config_writer_linefeed (GimpConfigWriter *writer)
|
|||||||
if (writer->buffer->len == 0)
|
if (writer->buffer->len == 0)
|
||||||
{
|
{
|
||||||
if (write (writer->fd, "\n", 1) < 0)
|
if (write (writer->fd, "\n", 1) < 0)
|
||||||
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
g_set_error (&writer->error,
|
||||||
|
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -328,7 +333,8 @@ gimp_config_writer_comment (GimpConfigWriter *writer,
|
|||||||
gimp_config_serialize_comment (writer->buffer, comment);
|
gimp_config_serialize_comment (writer->buffer, comment);
|
||||||
|
|
||||||
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
||||||
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
g_set_error (&writer->error,
|
||||||
|
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
|
|
||||||
g_string_truncate (writer->buffer, 0);
|
g_string_truncate (writer->buffer, 0);
|
||||||
|
@ -336,67 +336,6 @@ gimp_scanner_parse_color (GScanner *scanner,
|
|||||||
return (token == G_TOKEN_NONE);
|
return (token == G_TOKEN_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
|
||||||
gimp_scanner_parse_string_list (GScanner *scanner,
|
|
||||||
GList **dest)
|
|
||||||
{
|
|
||||||
GTokenType token;
|
|
||||||
GList *list = NULL;
|
|
||||||
|
|
||||||
token = G_TOKEN_LEFT_PAREN;
|
|
||||||
|
|
||||||
while (g_scanner_peek_next_token (scanner) == token)
|
|
||||||
{
|
|
||||||
token = g_scanner_get_next_token (scanner);
|
|
||||||
|
|
||||||
switch (token)
|
|
||||||
{
|
|
||||||
case G_TOKEN_LEFT_PAREN:
|
|
||||||
token = G_TOKEN_STRING;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case G_TOKEN_STRING:
|
|
||||||
do
|
|
||||||
{
|
|
||||||
list = g_list_append (list, g_strdup (scanner->value.v_string));
|
|
||||||
|
|
||||||
token = g_scanner_peek_next_token (scanner);
|
|
||||||
if (token == G_TOKEN_STRING)
|
|
||||||
g_scanner_get_next_token (scanner);
|
|
||||||
}
|
|
||||||
while (token == G_TOKEN_STRING);
|
|
||||||
token = G_TOKEN_RIGHT_PAREN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case G_TOKEN_RIGHT_PAREN:
|
|
||||||
token = G_TOKEN_NONE; /* indicates success */
|
|
||||||
goto finish;
|
|
||||||
|
|
||||||
default: /* do nothing */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
finish:
|
|
||||||
|
|
||||||
if (token != G_TOKEN_NONE)
|
|
||||||
{
|
|
||||||
g_list_foreach (list, (GFunc) g_free, NULL);
|
|
||||||
g_list_free (list);
|
|
||||||
list = NULL;
|
|
||||||
|
|
||||||
g_scanner_get_next_token (scanner);
|
|
||||||
g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
|
|
||||||
_("fatal parse error"), TRUE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*dest = list;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (token == G_TOKEN_NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* private functions */
|
/* private functions */
|
||||||
|
|
||||||
|
@ -42,8 +42,6 @@ gboolean gimp_scanner_parse_float (GScanner *scanner,
|
|||||||
gdouble *dest);
|
gdouble *dest);
|
||||||
gboolean gimp_scanner_parse_color (GScanner *scanner,
|
gboolean gimp_scanner_parse_color (GScanner *scanner,
|
||||||
GimpRGB *dest);
|
GimpRGB *dest);
|
||||||
gboolean gimp_scanner_parse_string_list (GScanner *scanner,
|
|
||||||
GList **dest);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_SCANNER_H__ */
|
#endif /* __GIMP_SCANNER_H__ */
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
#include "gui-types.h"
|
#include "gui-types.h"
|
||||||
|
|
||||||
|
#include "config/gimpconfigwriter.h"
|
||||||
|
|
||||||
#include "color-history.h"
|
#include "color-history.h"
|
||||||
|
|
||||||
|
|
||||||
@ -55,14 +57,14 @@ color_history_add_from_rc (GimpRGB *color)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
color_history_write (FILE *fp)
|
color_history_write (GimpConfigWriter *writer)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
if (! color_history_initialized)
|
if (! color_history_initialized)
|
||||||
color_history_init ();
|
color_history_init ();
|
||||||
|
|
||||||
fprintf (fp, "(color-history");
|
gimp_config_writer_open (writer, "color-history");
|
||||||
|
|
||||||
for (i = 0; i < COLOR_HISTORY_SIZE; i++)
|
for (i = 0; i < COLOR_HISTORY_SIZE; i++)
|
||||||
{
|
{
|
||||||
@ -77,11 +79,13 @@ color_history_write (FILE *fp)
|
|||||||
g_ascii_formatd (buf[3],
|
g_ascii_formatd (buf[3],
|
||||||
G_ASCII_DTOSTR_BUF_SIZE, "%f", color_history[i].a);
|
G_ASCII_DTOSTR_BUF_SIZE, "%f", color_history[i].a);
|
||||||
|
|
||||||
fprintf (fp, "\n (color-rgba %s %s %s %s)",
|
gimp_config_writer_open (writer, "color-rgba");
|
||||||
|
gimp_config_writer_printf (writer, "%s %s %s %s",
|
||||||
buf[0], buf[1], buf[2], buf[3]);
|
buf[0], buf[1], buf[2], buf[3]);
|
||||||
|
gimp_config_writer_close (writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf (fp, ")\n\n");
|
gimp_config_writer_close (writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -22,8 +22,6 @@
|
|||||||
#ifndef __COLOR_HISTORY_H__
|
#ifndef __COLOR_HISTORY_H__
|
||||||
#define __COLOR_HISTORY_H__
|
#define __COLOR_HISTORY_H__
|
||||||
|
|
||||||
#include <stdio.h> /* FILE */
|
|
||||||
|
|
||||||
#define COLOR_HISTORY_SIZE 16
|
#define COLOR_HISTORY_SIZE 16
|
||||||
|
|
||||||
|
|
||||||
@ -34,7 +32,7 @@ void color_history_get (gint index,
|
|||||||
GimpRGB *rgb);
|
GimpRGB *rgb);
|
||||||
|
|
||||||
void color_history_add_from_rc (GimpRGB *color);
|
void color_history_add_from_rc (GimpRGB *color);
|
||||||
void color_history_write (FILE *fp);
|
void color_history_write (GimpConfigWriter *writer);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __COLOR_HISTORY_H__ */
|
#endif /* __COLOR_HISTORY_H__ */
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#include "core/gimp.h"
|
#include "core/gimp.h"
|
||||||
|
|
||||||
|
#include "config/gimpconfigwriter.h"
|
||||||
#include "config/gimpscanner.h"
|
#include "config/gimpscanner.h"
|
||||||
|
|
||||||
#include "widgets/gimpdialogfactory.h"
|
#include "widgets/gimpdialogfactory.h"
|
||||||
@ -48,7 +49,8 @@
|
|||||||
|
|
||||||
static GTokenType session_info_deserialize (GScanner *scanner,
|
static GTokenType session_info_deserialize (GScanner *scanner,
|
||||||
Gimp *gimp);
|
Gimp *gimp);
|
||||||
|
static GTokenType session_info_dock_deserialize (GScanner *scanner,
|
||||||
|
GimpSessionInfo *info);
|
||||||
|
|
||||||
/* public functions */
|
/* public functions */
|
||||||
|
|
||||||
@ -62,7 +64,9 @@ enum
|
|||||||
SESSION_INFO_SIZE,
|
SESSION_INFO_SIZE,
|
||||||
SESSION_INFO_OPEN,
|
SESSION_INFO_OPEN,
|
||||||
SESSION_INFO_AUX,
|
SESSION_INFO_AUX,
|
||||||
SESSION_INFO_DOCK
|
SESSION_INFO_DOCK,
|
||||||
|
|
||||||
|
SESSION_INFO_DOCK_BOOK
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -106,6 +110,9 @@ session_init (Gimp *gimp)
|
|||||||
g_scanner_scope_add_symbol (scanner, SESSION_INFO, "dock",
|
g_scanner_scope_add_symbol (scanner, SESSION_INFO, "dock",
|
||||||
GINT_TO_POINTER (SESSION_INFO_DOCK));
|
GINT_TO_POINTER (SESSION_INFO_DOCK));
|
||||||
|
|
||||||
|
g_scanner_scope_add_symbol (scanner, SESSION_INFO_DOCK, "book",
|
||||||
|
GINT_TO_POINTER (SESSION_INFO_DOCK_BOOK));
|
||||||
|
|
||||||
token = G_TOKEN_LEFT_PAREN;
|
token = G_TOKEN_LEFT_PAREN;
|
||||||
|
|
||||||
while (g_scanner_peek_next_token (scanner) == token)
|
while (g_scanner_peek_next_token (scanner) == token)
|
||||||
@ -191,35 +198,42 @@ session_restore (Gimp *gimp)
|
|||||||
void
|
void
|
||||||
session_save (Gimp *gimp)
|
session_save (Gimp *gimp)
|
||||||
{
|
{
|
||||||
|
GimpConfigWriter *writer;
|
||||||
gchar *filename;
|
gchar *filename;
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_GIMP (gimp));
|
g_return_if_fail (GIMP_IS_GIMP (gimp));
|
||||||
|
|
||||||
filename = gimp_personal_rc_file ("sessionrc");
|
filename = gimp_personal_rc_file ("sessionrc");
|
||||||
|
|
||||||
fp = fopen (filename, "wt");
|
writer = gimp_config_writer_new (filename,
|
||||||
g_free (filename);
|
TRUE,
|
||||||
if (!fp)
|
"GIMP sessionrc\n\n"
|
||||||
|
"This file takes session-specific info "
|
||||||
|
"(that is info, you want to keep between "
|
||||||
|
"two gimp-sessions). You are not supposed "
|
||||||
|
"to edit it manually, but of course you "
|
||||||
|
"can do.\n"
|
||||||
|
"This file will be entirely rewritten "
|
||||||
|
"every time you quit the gimp. If this "
|
||||||
|
"file isn't found, defaults are used.",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (!writer)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fprintf (fp, ("# GIMP sessionrc\n"
|
gimp_dialog_factories_session_save (writer);
|
||||||
"# This file takes session-specific info (that is info,\n"
|
gimp_config_writer_linefeed (writer);
|
||||||
"# you want to keep between two gimp-sessions). You are\n"
|
|
||||||
"# not supposed to edit it manually, but of course you\n"
|
|
||||||
"# can do. This file will be entirely rewritten every time\n"
|
|
||||||
"# you quit the gimp. If this file isn't found, defaults\n"
|
|
||||||
"# are used.\n\n"));
|
|
||||||
|
|
||||||
gimp_dialog_factories_session_save (fp);
|
|
||||||
|
|
||||||
/* save last tip shown */
|
/* save last tip shown */
|
||||||
fprintf (fp, "(last-tip-shown %d)\n\n",
|
gimp_config_writer_open (writer, "last-tip-shown");
|
||||||
|
gimp_config_writer_printf (writer, "%d",
|
||||||
GIMP_GUI_CONFIG (gimp->config)->last_tip + 1);
|
GIMP_GUI_CONFIG (gimp->config)->last_tip + 1);
|
||||||
|
gimp_config_writer_close (writer);
|
||||||
|
gimp_config_writer_linefeed (writer);
|
||||||
|
|
||||||
color_history_write (fp);
|
color_history_write (writer);
|
||||||
|
|
||||||
fclose (fp);
|
gimp_config_writer_finish (writer, "end of sessionrc", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -234,6 +248,7 @@ session_info_deserialize (GScanner *scanner,
|
|||||||
GTokenType token;
|
GTokenType token;
|
||||||
gchar *factory_name;
|
gchar *factory_name;
|
||||||
gchar *entry_name;
|
gchar *entry_name;
|
||||||
|
gchar *string;
|
||||||
|
|
||||||
token = G_TOKEN_STRING;
|
token = G_TOKEN_STRING;
|
||||||
|
|
||||||
@ -301,29 +316,22 @@ session_info_deserialize (GScanner *scanner,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SESSION_INFO_AUX:
|
case SESSION_INFO_AUX:
|
||||||
if (! gimp_scanner_parse_string_list (scanner, &info->aux_info))
|
while (gimp_scanner_parse_string (scanner, &string))
|
||||||
{
|
info->aux_info = g_list_append (info->aux_info, string);
|
||||||
token = G_TOKEN_NONE;
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SESSION_INFO_DOCK:
|
case SESSION_INFO_DOCK:
|
||||||
if (info->toplevel_entry)
|
if (info->toplevel_entry)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
while (g_scanner_peek_next_token (scanner) == G_TOKEN_LEFT_PAREN)
|
g_scanner_set_scope (scanner, SESSION_INFO_DOCK);
|
||||||
{
|
token = session_info_dock_deserialize (scanner, info);
|
||||||
GList *list = NULL;
|
|
||||||
|
|
||||||
if (! gimp_scanner_parse_string_list (scanner, &list))
|
if (token == G_TOKEN_LEFT_PAREN)
|
||||||
{
|
g_scanner_set_scope (scanner, SESSION_INFO);
|
||||||
token = G_TOKEN_NONE;
|
else
|
||||||
goto error;
|
goto error;
|
||||||
}
|
|
||||||
|
|
||||||
info->sub_dialogs = g_list_append (info->sub_dialogs, list);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -370,3 +378,54 @@ session_info_deserialize (GScanner *scanner,
|
|||||||
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GTokenType
|
||||||
|
session_info_dock_deserialize (GScanner *scanner,
|
||||||
|
GimpSessionInfo *info)
|
||||||
|
{
|
||||||
|
GList *list;
|
||||||
|
gchar *string;
|
||||||
|
GTokenType token;
|
||||||
|
|
||||||
|
token = G_TOKEN_LEFT_PAREN;
|
||||||
|
|
||||||
|
while (g_scanner_peek_next_token (scanner) == token)
|
||||||
|
{
|
||||||
|
token = g_scanner_get_next_token (scanner);
|
||||||
|
|
||||||
|
switch (token)
|
||||||
|
{
|
||||||
|
case G_TOKEN_LEFT_PAREN:
|
||||||
|
token = G_TOKEN_SYMBOL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case G_TOKEN_SYMBOL:
|
||||||
|
switch (GPOINTER_TO_INT (scanner->value.v_symbol))
|
||||||
|
{
|
||||||
|
case SESSION_INFO_DOCK_BOOK:
|
||||||
|
list = NULL;
|
||||||
|
while (gimp_scanner_parse_string (scanner, &string))
|
||||||
|
list = g_list_append (list, string);
|
||||||
|
|
||||||
|
if (list)
|
||||||
|
info->sub_dialogs = g_list_append (info->sub_dialogs, list);
|
||||||
|
|
||||||
|
token = G_TOKEN_RIGHT_PAREN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case G_TOKEN_RIGHT_PAREN:
|
||||||
|
token = G_TOKEN_LEFT_PAREN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
|
|
||||||
#include "core/gimpcontext.h"
|
#include "core/gimpcontext.h"
|
||||||
|
|
||||||
|
#include "config/gimpconfigwriter.h"
|
||||||
|
|
||||||
#include "gimpcontainerview.h"
|
#include "gimpcontainerview.h"
|
||||||
#include "gimpcontainerview-utils.h"
|
#include "gimpcontainerview-utils.h"
|
||||||
#include "gimpcursor.h"
|
#include "gimpcursor.h"
|
||||||
@ -75,7 +77,7 @@ static void gimp_dialog_factory_finalize (GObject *object
|
|||||||
|
|
||||||
static void gimp_dialog_factories_save_foreach (gchar *name,
|
static void gimp_dialog_factories_save_foreach (gchar *name,
|
||||||
GimpDialogFactory *factory,
|
GimpDialogFactory *factory,
|
||||||
FILE *fp);
|
GimpConfigWriter *writer);
|
||||||
static void gimp_dialog_factories_restore_foreach (gchar *name,
|
static void gimp_dialog_factories_restore_foreach (gchar *name,
|
||||||
GimpDialogFactory *factory,
|
GimpDialogFactory *factory,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
@ -886,17 +888,17 @@ gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_dialog_factories_session_save (FILE *file)
|
gimp_dialog_factories_session_save (GimpConfigWriter *writer)
|
||||||
{
|
{
|
||||||
GimpDialogFactoryClass *factory_class;
|
GimpDialogFactoryClass *factory_class;
|
||||||
|
|
||||||
g_return_if_fail (file != NULL);
|
g_return_if_fail (writer != NULL);
|
||||||
|
|
||||||
factory_class = g_type_class_peek (GIMP_TYPE_DIALOG_FACTORY);
|
factory_class = g_type_class_peek (GIMP_TYPE_DIALOG_FACTORY);
|
||||||
|
|
||||||
g_hash_table_foreach (factory_class->factories,
|
g_hash_table_foreach (factory_class->factories,
|
||||||
(GHFunc) gimp_dialog_factories_save_foreach,
|
(GHFunc) gimp_dialog_factories_save_foreach,
|
||||||
file);
|
writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -999,7 +1001,7 @@ gimp_dialog_factories_unidle (void)
|
|||||||
static void
|
static void
|
||||||
gimp_dialog_factories_save_foreach (gchar *name,
|
gimp_dialog_factories_save_foreach (gchar *name,
|
||||||
GimpDialogFactory *factory,
|
GimpDialogFactory *factory,
|
||||||
FILE *fp)
|
GimpConfigWriter *writer)
|
||||||
{
|
{
|
||||||
GList *list;
|
GList *list;
|
||||||
|
|
||||||
@ -1022,22 +1024,31 @@ gimp_dialog_factories_save_foreach (gchar *name,
|
|||||||
gimp_dialog_factory_get_window_info (info->widget, info);
|
gimp_dialog_factory_get_window_info (info->widget, info);
|
||||||
|
|
||||||
if (info->toplevel_entry)
|
if (info->toplevel_entry)
|
||||||
{
|
|
||||||
dialog_name = info->toplevel_entry->identifier;
|
dialog_name = info->toplevel_entry->identifier;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
dialog_name = "dock";
|
dialog_name = "dock";
|
||||||
}
|
|
||||||
|
|
||||||
fprintf (fp, "(session-info \"%s\" \"%s\"\n", name, dialog_name);
|
gimp_config_writer_open (writer, "session-info");
|
||||||
fprintf (fp, " (position %d %d)", info->x, info->y);
|
gimp_config_writer_string (writer, name);
|
||||||
|
gimp_config_writer_string (writer, dialog_name);
|
||||||
|
|
||||||
|
gimp_config_writer_open (writer, "position");
|
||||||
|
gimp_config_writer_printf (writer, "%d %d", info->x, info->y);
|
||||||
|
gimp_config_writer_close (writer);
|
||||||
|
|
||||||
if (info->width > 0 && info->height > 0)
|
if (info->width > 0 && info->height > 0)
|
||||||
fprintf (fp, "\n (size %d %d)", info->width, info->height);
|
{
|
||||||
|
gimp_config_writer_open (writer, "size");
|
||||||
|
gimp_config_writer_printf (writer, "%d %d",
|
||||||
|
info->width, info->height);
|
||||||
|
gimp_config_writer_close (writer);
|
||||||
|
}
|
||||||
|
|
||||||
if (info->open)
|
if (info->open)
|
||||||
fprintf (fp, "\n (open-on-exit)");
|
{
|
||||||
|
gimp_config_writer_open (writer, "open-on-exit");
|
||||||
|
gimp_config_writer_close (writer);
|
||||||
|
}
|
||||||
|
|
||||||
/* save aux-info */
|
/* save aux-info */
|
||||||
if (info->widget)
|
if (info->widget)
|
||||||
@ -1048,21 +1059,12 @@ gimp_dialog_factories_save_foreach (gchar *name,
|
|||||||
{
|
{
|
||||||
GList *aux;
|
GList *aux;
|
||||||
|
|
||||||
fprintf (fp, "\n (aux-info (");
|
gimp_config_writer_open (writer, "aux-info");
|
||||||
|
|
||||||
for (aux = info->aux_info; aux; aux = g_list_next (aux))
|
for (aux = info->aux_info; aux; aux = g_list_next (aux))
|
||||||
{
|
gimp_config_writer_string (writer, (gchar *) aux->data);
|
||||||
gchar *str;
|
|
||||||
|
|
||||||
str = (gchar *) aux->data;
|
gimp_config_writer_close (writer);
|
||||||
|
|
||||||
if (aux->prev)
|
|
||||||
fprintf (fp, " \"%s\"", str);
|
|
||||||
else
|
|
||||||
fprintf (fp, "\"%s\"", str);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf (fp, "))");
|
|
||||||
|
|
||||||
g_list_foreach (info->aux_info, (GFunc) g_free, NULL);
|
g_list_foreach (info->aux_info, (GFunc) g_free, NULL);
|
||||||
g_list_free (info->aux_info);
|
g_list_free (info->aux_info);
|
||||||
@ -1077,7 +1079,7 @@ gimp_dialog_factories_save_foreach (gchar *name,
|
|||||||
|
|
||||||
dock = GIMP_DOCK (info->widget);
|
dock = GIMP_DOCK (info->widget);
|
||||||
|
|
||||||
fprintf (fp, "\n (dock ");
|
gimp_config_writer_open (writer, "dock");
|
||||||
|
|
||||||
for (books = dock->dockbooks; books; books = g_list_next (books))
|
for (books = dock->dockbooks; books; books = g_list_next (books))
|
||||||
{
|
{
|
||||||
@ -1087,7 +1089,7 @@ gimp_dialog_factories_save_foreach (gchar *name,
|
|||||||
|
|
||||||
dockbook = (GimpDockbook *) books->data;
|
dockbook = (GimpDockbook *) books->data;
|
||||||
|
|
||||||
fprintf (fp, "(");
|
gimp_config_writer_open (writer, "book");
|
||||||
|
|
||||||
children = gtk_container_get_children (GTK_CONTAINER (dockbook));
|
children = gtk_container_get_children (GTK_CONTAINER (dockbook));
|
||||||
|
|
||||||
@ -1106,6 +1108,8 @@ gimp_dialog_factories_save_foreach (gchar *name,
|
|||||||
GimpContainerView *view;
|
GimpContainerView *view;
|
||||||
gint preview_size = -1;
|
gint preview_size = -1;
|
||||||
|
|
||||||
|
gimp_config_writer_linefeed (writer);
|
||||||
|
|
||||||
view = gimp_container_view_get_by_dockable (dockable);
|
view = gimp_container_view_get_by_dockable (dockable);
|
||||||
|
|
||||||
if (view && view->preview_size >= GIMP_PREVIEW_SIZE_TINY)
|
if (view && view->preview_size >= GIMP_PREVIEW_SIZE_TINY)
|
||||||
@ -1116,29 +1120,27 @@ gimp_dialog_factories_save_foreach (gchar *name,
|
|||||||
if (preview_size > 0 &&
|
if (preview_size > 0 &&
|
||||||
preview_size != entry->preview_size)
|
preview_size != entry->preview_size)
|
||||||
{
|
{
|
||||||
fprintf (fp, "\"%s@%d\"",
|
gimp_config_writer_printf (writer, "\"%s@%d\"",
|
||||||
entry->identifier, preview_size);
|
entry->identifier,
|
||||||
|
preview_size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf (fp, "\"%s\"",
|
gimp_config_writer_printf (writer, "\"%s\"",
|
||||||
entry->identifier);
|
entry->identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pages->next)
|
|
||||||
fprintf (fp, " ");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (children);
|
g_list_free (children);
|
||||||
|
|
||||||
fprintf (fp, ")%s", books->next ? "\n " : "");
|
gimp_config_writer_close (writer); /* book */
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf (fp, ")");
|
gimp_config_writer_close (writer); /* dock */
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf (fp, ")\n\n");
|
gimp_config_writer_close (writer); /* session-info */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
#define __GIMP_DIALOG_FACTORY_H__
|
#define __GIMP_DIALOG_FACTORY_H__
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "core/gimpobject.h"
|
#include "core/gimpobject.h"
|
||||||
|
|
||||||
|
|
||||||
@ -145,7 +143,7 @@ void gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
|
|||||||
void gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory,
|
void gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory,
|
||||||
GtkWidget *dialog);
|
GtkWidget *dialog);
|
||||||
|
|
||||||
void gimp_dialog_factories_session_save (FILE *file);
|
void gimp_dialog_factories_session_save (GimpConfigWriter *writer);
|
||||||
void gimp_dialog_factories_session_restore (void);
|
void gimp_dialog_factories_session_restore (void);
|
||||||
void gimp_dialog_factories_session_clear (void);
|
void gimp_dialog_factories_session_clear (void);
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
@ -128,6 +129,7 @@ gimp_config_writer_open (GimpConfigWriter *writer,
|
|||||||
const gchar *name)
|
const gchar *name)
|
||||||
{
|
{
|
||||||
g_return_if_fail (writer != NULL);
|
g_return_if_fail (writer != NULL);
|
||||||
|
g_return_if_fail (name != NULL);
|
||||||
|
|
||||||
if (writer->error)
|
if (writer->error)
|
||||||
return;
|
return;
|
||||||
@ -160,9 +162,11 @@ gimp_config_writer_print (GimpConfigWriter *writer,
|
|||||||
if (len < 0)
|
if (len < 0)
|
||||||
len = strlen (string);
|
len = strlen (string);
|
||||||
|
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
g_string_append_c (writer->buffer, ' ');
|
g_string_append_c (writer->buffer, ' ');
|
||||||
|
|
||||||
g_string_append_len (writer->buffer, string, len);
|
g_string_append_len (writer->buffer, string, len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -179,12 +183,11 @@ gimp_config_writer_printf (GimpConfigWriter *writer,
|
|||||||
if (writer->error)
|
if (writer->error)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_string_append_c (writer->buffer, ' ');
|
|
||||||
|
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
buffer = g_strdup_vprintf (format, args);
|
buffer = g_strdup_vprintf (format, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
|
g_string_append_c (writer->buffer, ' ');
|
||||||
g_string_append (writer->buffer, buffer);
|
g_string_append (writer->buffer, buffer);
|
||||||
|
|
||||||
g_free (buffer);
|
g_free (buffer);
|
||||||
@ -245,7 +248,8 @@ gimp_config_writer_close (GimpConfigWriter *writer)
|
|||||||
g_string_append_c (writer->buffer, '\n');
|
g_string_append_c (writer->buffer, '\n');
|
||||||
|
|
||||||
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
||||||
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
g_set_error (&writer->error,
|
||||||
|
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
|
|
||||||
g_string_truncate (writer->buffer, 0);
|
g_string_truncate (writer->buffer, 0);
|
||||||
@ -301,7 +305,8 @@ gimp_config_writer_linefeed (GimpConfigWriter *writer)
|
|||||||
if (writer->buffer->len == 0)
|
if (writer->buffer->len == 0)
|
||||||
{
|
{
|
||||||
if (write (writer->fd, "\n", 1) < 0)
|
if (write (writer->fd, "\n", 1) < 0)
|
||||||
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
g_set_error (&writer->error,
|
||||||
|
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -328,7 +333,8 @@ gimp_config_writer_comment (GimpConfigWriter *writer,
|
|||||||
gimp_config_serialize_comment (writer->buffer, comment);
|
gimp_config_serialize_comment (writer->buffer, comment);
|
||||||
|
|
||||||
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
|
||||||
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
g_set_error (&writer->error,
|
||||||
|
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
|
|
||||||
g_string_truncate (writer->buffer, 0);
|
g_string_truncate (writer->buffer, 0);
|
||||||
|
@ -336,67 +336,6 @@ gimp_scanner_parse_color (GScanner *scanner,
|
|||||||
return (token == G_TOKEN_NONE);
|
return (token == G_TOKEN_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
|
||||||
gimp_scanner_parse_string_list (GScanner *scanner,
|
|
||||||
GList **dest)
|
|
||||||
{
|
|
||||||
GTokenType token;
|
|
||||||
GList *list = NULL;
|
|
||||||
|
|
||||||
token = G_TOKEN_LEFT_PAREN;
|
|
||||||
|
|
||||||
while (g_scanner_peek_next_token (scanner) == token)
|
|
||||||
{
|
|
||||||
token = g_scanner_get_next_token (scanner);
|
|
||||||
|
|
||||||
switch (token)
|
|
||||||
{
|
|
||||||
case G_TOKEN_LEFT_PAREN:
|
|
||||||
token = G_TOKEN_STRING;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case G_TOKEN_STRING:
|
|
||||||
do
|
|
||||||
{
|
|
||||||
list = g_list_append (list, g_strdup (scanner->value.v_string));
|
|
||||||
|
|
||||||
token = g_scanner_peek_next_token (scanner);
|
|
||||||
if (token == G_TOKEN_STRING)
|
|
||||||
g_scanner_get_next_token (scanner);
|
|
||||||
}
|
|
||||||
while (token == G_TOKEN_STRING);
|
|
||||||
token = G_TOKEN_RIGHT_PAREN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case G_TOKEN_RIGHT_PAREN:
|
|
||||||
token = G_TOKEN_NONE; /* indicates success */
|
|
||||||
goto finish;
|
|
||||||
|
|
||||||
default: /* do nothing */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
finish:
|
|
||||||
|
|
||||||
if (token != G_TOKEN_NONE)
|
|
||||||
{
|
|
||||||
g_list_foreach (list, (GFunc) g_free, NULL);
|
|
||||||
g_list_free (list);
|
|
||||||
list = NULL;
|
|
||||||
|
|
||||||
g_scanner_get_next_token (scanner);
|
|
||||||
g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
|
|
||||||
_("fatal parse error"), TRUE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*dest = list;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (token == G_TOKEN_NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* private functions */
|
/* private functions */
|
||||||
|
|
||||||
|
@ -42,8 +42,6 @@ gboolean gimp_scanner_parse_float (GScanner *scanner,
|
|||||||
gdouble *dest);
|
gdouble *dest);
|
||||||
gboolean gimp_scanner_parse_color (GScanner *scanner,
|
gboolean gimp_scanner_parse_color (GScanner *scanner,
|
||||||
GimpRGB *dest);
|
GimpRGB *dest);
|
||||||
gboolean gimp_scanner_parse_string_list (GScanner *scanner,
|
|
||||||
GList **dest);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_SCANNER_H__ */
|
#endif /* __GIMP_SCANNER_H__ */
|
||||||
|
Reference in New Issue
Block a user