Commit 4305c39c authored by Michael Natterer's avatar Michael Natterer 😴 Committed by Michael Natterer
Browse files

app/core/Makefile.am new file implementing the docindex.* replacement.

2001-08-11  Michael Natterer  <mitch@gimp.org>

	* app/core/Makefile.am
	* app/core/gimpdocuments.[ch]: new file implementing the
	docindex.* replacement.

	* app/gimprc.c: added TT_XDOCUMENT to parse the new document
	history.

	* app/file-save.c
	* app/gui/file-open-dialog.c: add opened & saved images to the
	document history.

	* app/core/gimp.c: call gimp_documents_init/exit() instead of
	doing it here.

	* app/core/gimpimagefile.[ch]: removed the "filename" attribute
	and use GimpObject's "name" instead.

	* app/gui/dialogs-constructors.[ch]
	* app/gui/dialogs.c
	* app/gui/menus.c: added a menu entry/dockable for the document
	history.

	* app/widgets/gimpdnd.[ch]: make it DND-able.

	* app/widgets/gimppreview.c: fix  preview rendering correctly this
	itme.
parent 3280d311
2001-08-11 Michael Natterer <mitch@gimp.org>
* app/core/Makefile.am
* app/core/gimpdocuments.[ch]: new file implementing the
docindex.* replacement.
* app/gimprc.c: added TT_XDOCUMENT to parse the new document
history.
* app/file-save.c
* app/gui/file-open-dialog.c: add opened & saved images to the
document history.
* app/core/gimp.c: call gimp_documents_init/exit() instead of
doing it here.
* app/core/gimpimagefile.[ch]: removed the "filename" attribute
and use GimpObject's "name" instead.
* app/gui/dialogs-constructors.[ch]
* app/gui/dialogs.c
* app/gui/menus.c: added a menu entry/dockable for the document
history.
* app/widgets/gimpdnd.[ch]: make it DND-able.
* app/widgets/gimppreview.c: fix preview rendering correctly this
itme.
2001-08-10 Sven Neumann <sven@gimp.org>
* libgimpwidgets/Makefile.am
......@@ -7,7 +36,7 @@
* libgimpwidgets/gimpfileselection.c: more GObject porting.
2001-08-10 Michael Natterer <mitch@convergence.de>
2001-08-10 Michael Natterer <mitch@gimp.org>
* app/nav_window.c: fix compiler warning.
......
......@@ -44,6 +44,8 @@ libappcore_a_sources = @STRIP_BEGIN@ \
gimpdatafiles.h \
gimpdatalist.c \
gimpdatalist.h \
gimpdocuments.c \
gimpdocuments.h \
gimpdrawable.c \
gimpdrawable.h \
gimpdrawable-desaturate.c \
......
/* The GIMP -- an image manipulation program
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <gtk/gtk.h>
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "libgimpbase/gimpbase.h"
#include "core-types.h"
#include "gimp.h"
#include "gimpdocuments.h"
#include "gimpimagefile.h"
#include "gimplist.h"
#include "gimprc.h"
void
gimp_documents_init (Gimp *gimp)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (gimp->documents == NULL);
gimp->documents = gimp_list_new (GIMP_TYPE_IMAGEFILE,
GIMP_CONTAINER_POLICY_STRONG);
gtk_object_ref (GTK_OBJECT (gimp->documents));
gtk_object_sink (GTK_OBJECT (gimp->documents));
}
void
gimp_documents_exit (Gimp *gimp)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
if (gimp->documents)
{
g_object_unref (G_OBJECT (gimp->documents));
gimp->documents = NULL;
}
}
void
gimp_documents_load (Gimp *gimp)
{
gchar *filename;
g_return_if_fail (GIMP_IS_GIMP (gimp));
filename = gimp_personal_rc_file ("documents");
gimprc_parse_file (filename);
g_free (filename);
}
static void
gimp_documents_save_func (GimpImagefile *imagefile,
FILE *fp)
{
fprintf (fp, "(document \"%s\")\n", GIMP_OBJECT (imagefile)->name);
}
void
gimp_documents_save (Gimp *gimp)
{
gchar *tmp_filename = NULL;
gchar *bak_filename = NULL;
gchar *rc_filename = NULL;
FILE *fp;
tmp_filename = gimp_personal_rc_file ("#documents.tmp~");
bak_filename = gimp_personal_rc_file ("documents.bak");
rc_filename = gimp_personal_rc_file ("documents");
fp = fopen (tmp_filename, "w");
if (! fp)
goto cleanup;
fprintf (fp,
"# GIMP documents\n"
"#\n"
"# This file will be entirely rewritten every time you\n"
"# quit the gimp.\n\n");
gimp_container_foreach (gimp->documents,
(GFunc) gimp_documents_save_func,
fp);
fclose (fp);
#if defined(G_OS_WIN32) || defined(__EMX__)
/* First rename the old documents out of the way */
unlink (bak_filename);
rename (rc_filename, bak_filename);
#endif
if (rename (tmp_filename, rc_filename) != 0)
{
#if defined(G_OS_WIN32) || defined(__EMX__)
/* Rename the old documentrc back */
rename (bak_filename, rc_filename);
#endif
unlink (tmp_filename);
}
cleanup:
g_free (tmp_filename);
g_free (bak_filename);
g_free (rc_filename);
}
void
gimp_documents_add (Gimp *gimp,
const gchar *filename)
{
GimpImagefile *imagefile;
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (filename != NULL);
imagefile = (GimpImagefile *)
gimp_container_get_child_by_name (gimp->documents, filename);
if (imagefile)
{
gimp_container_reorder (gimp->documents, GIMP_OBJECT (imagefile), 0);
}
else
{
imagefile = gimp_imagefile_new (filename);
gimp_container_add (gimp->documents, GIMP_OBJECT (imagefile));
gtk_object_ref (GTK_OBJECT (imagefile));
gtk_object_sink (GTK_OBJECT (imagefile));
}
}
/* The GIMP -- an image manipulation program
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMP_DOCUMENTS_H__
#define __GIMP_DOCUMENTS_H__
void gimp_documents_init (Gimp *gimp);
void gimp_documents_exit (Gimp *gimp);
void gimp_documents_load (Gimp *gimp);
void gimp_documents_save (Gimp *gimp);
void gimp_documents_add (Gimp *gimp,
const gchar *filename);
#endif /* __GIMP_DOCUMENTS_H__ */
......@@ -38,6 +38,7 @@
#include "gimpcontext.h"
#include "gimpcoreconfig.h"
#include "gimpdatafactory.h"
#include "gimpdocuments.h"
#include "gimpgradient.h"
#include "gimpimage.h"
#include "gimpimage-new.h"
......@@ -149,10 +150,7 @@ gimp_init (Gimp *gimp)
gtk_object_ref (GTK_OBJECT (gimp->tool_info_list));
gtk_object_sink (GTK_OBJECT (gimp->tool_info_list));
gimp->documents = gimp_list_new (GIMP_TYPE_IMAGEFILE,
GIMP_CONTAINER_POLICY_STRONG);
gtk_object_ref (GTK_OBJECT (gimp->documents));
gtk_object_sink (GTK_OBJECT (gimp->documents));
gimp_documents_init (gimp);
gimp->image_base_type_names = NULL;
gimp->fill_type_names = NULL;
......@@ -185,11 +183,7 @@ gimp_destroy (GtkObject *object)
gimp_image_new_exit (gimp);
if (gimp->documents)
{
g_object_unref (G_OBJECT (gimp->documents));
gimp->documents = NULL;
}
gimp_documents_exit (gimp);
if (gimp->tool_info_list)
{
......@@ -274,6 +268,7 @@ gimp_new (void)
g_type_class_ref (GIMP_TYPE_CONTEXT);
g_type_class_ref (GIMP_TYPE_CONTAINER);
g_type_class_ref (GIMP_TYPE_IMAGE);
g_type_class_ref (GIMP_TYPE_IMAGEFILE);
gimp = g_object_new (GIMP_TYPE_GIMP, NULL);
......@@ -389,21 +384,25 @@ gimp_restore (Gimp *gimp,
gimp_parasiterc_load (gimp);
/* initialize the list of gimp brushes */
app_init_update_status (NULL, _("Brushes"), 0.20);
app_init_update_status (NULL, _("Brushes"), 0.18);
gimp_data_factory_data_init (gimp->brush_factory, no_data);
/* initialize the list of gimp patterns */
app_init_update_status (NULL, _("Patterns"), 0.40);
app_init_update_status (NULL, _("Patterns"), 0.36);
gimp_data_factory_data_init (gimp->pattern_factory, no_data);
/* initialize the list of gimp palettes */
app_init_update_status (NULL, _("Palettes"), 0.60);
app_init_update_status (NULL, _("Palettes"), 0.54);
gimp_data_factory_data_init (gimp->palette_factory, no_data);
/* initialize the list of gimp gradients */
app_init_update_status (NULL, _("Gradients"), 0.80);
app_init_update_status (NULL, _("Gradients"), 0.72);
gimp_data_factory_data_init (gimp->gradient_factory, no_data);
/* initialize the global parasite table */
app_init_update_status (NULL, _("Documents"), 0.90);
gimp_documents_load (gimp);
app_init_update_status (NULL, NULL, 1.00);
}
......@@ -417,6 +416,7 @@ gimp_shutdown (Gimp *gimp)
gimp_data_factory_data_save (gimp->pattern_factory);
gimp_data_factory_data_save (gimp->gradient_factory);
gimp_data_factory_data_save (gimp->palette_factory);
gimp_documents_save (gimp);
gimp_parasiterc_save (gimp);
gimp_unitrc_save (gimp);
}
......
/* The GIMP -- an image manipulation program
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <gtk/gtk.h>
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "libgimpbase/gimpbase.h"
#include "core-types.h"
#include "gimp.h"
#include "gimpdocuments.h"
#include "gimpimagefile.h"
#include "gimplist.h"
#include "gimprc.h"
void
gimp_documents_init (Gimp *gimp)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (gimp->documents == NULL);
gimp->documents = gimp_list_new (GIMP_TYPE_IMAGEFILE,
GIMP_CONTAINER_POLICY_STRONG);
gtk_object_ref (GTK_OBJECT (gimp->documents));
gtk_object_sink (GTK_OBJECT (gimp->documents));
}
void
gimp_documents_exit (Gimp *gimp)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
if (gimp->documents)
{
g_object_unref (G_OBJECT (gimp->documents));
gimp->documents = NULL;
}
}
void
gimp_documents_load (Gimp *gimp)
{
gchar *filename;
g_return_if_fail (GIMP_IS_GIMP (gimp));
filename = gimp_personal_rc_file ("documents");
gimprc_parse_file (filename);
g_free (filename);
}
static void
gimp_documents_save_func (GimpImagefile *imagefile,
FILE *fp)
{
fprintf (fp, "(document \"%s\")\n", GIMP_OBJECT (imagefile)->name);
}
void
gimp_documents_save (Gimp *gimp)
{
gchar *tmp_filename = NULL;
gchar *bak_filename = NULL;
gchar *rc_filename = NULL;
FILE *fp;
tmp_filename = gimp_personal_rc_file ("#documents.tmp~");
bak_filename = gimp_personal_rc_file ("documents.bak");
rc_filename = gimp_personal_rc_file ("documents");
fp = fopen (tmp_filename, "w");
if (! fp)
goto cleanup;
fprintf (fp,
"# GIMP documents\n"
"#\n"
"# This file will be entirely rewritten every time you\n"
"# quit the gimp.\n\n");
gimp_container_foreach (gimp->documents,
(GFunc) gimp_documents_save_func,
fp);
fclose (fp);
#if defined(G_OS_WIN32) || defined(__EMX__)
/* First rename the old documents out of the way */
unlink (bak_filename);
rename (rc_filename, bak_filename);
#endif
if (rename (tmp_filename, rc_filename) != 0)
{
#if defined(G_OS_WIN32) || defined(__EMX__)
/* Rename the old documentrc back */
rename (bak_filename, rc_filename);
#endif
unlink (tmp_filename);
}
cleanup:
g_free (tmp_filename);
g_free (bak_filename);
g_free (rc_filename);
}
void
gimp_documents_add (Gimp *gimp,
const gchar *filename)
{
GimpImagefile *imagefile;
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (filename != NULL);
imagefile = (GimpImagefile *)
gimp_container_get_child_by_name (gimp->documents, filename);
if (imagefile)
{
gimp_container_reorder (gimp->documents, GIMP_OBJECT (imagefile), 0);
}
else
{
imagefile = gimp_imagefile_new (filename);
gimp_container_add (gimp->documents, GIMP_OBJECT (imagefile));
gtk_object_ref (GTK_OBJECT (imagefile));
gtk_object_sink (GTK_OBJECT (imagefile));
}
}
/* The GIMP -- an image manipulation program
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMP_DOCUMENTS_H__
#define __GIMP_DOCUMENTS_H__
void gimp_documents_init (Gimp *gimp);
void gimp_documents_exit (Gimp *gimp);
void gimp_documents_load (Gimp *gimp);
void gimp_documents_save (Gimp *gimp);
void gimp_documents_add (Gimp *gimp,
const gchar *filename);
#endif /* __GIMP_DOCUMENTS_H__ */
/* The GIMP -- an image manipulation program
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <gtk/gtk.h>
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "libgimpbase/gimpbase.h"
#include "core-types.h"
#include "gimp.h"
#include "gimpdocuments.h"
#include "gimpimagefile.h"
#include "gimplist.h"
#include "gimprc.h"
void
gimp_documents_init (Gimp *gimp)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (gimp->documents == NULL);
gimp->documents = gimp_list_new (GIMP_TYPE_IMAGEFILE,
GIMP_CONTAINER_POLICY_STRONG);
gtk_object_ref (GTK_OBJECT (gimp->documents));
gtk_object_sink (GTK_OBJECT (gimp->documents));
}
void
gimp_documents_exit (Gimp *gimp)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
if (gimp->documents)
{
g_object_unref (G_OBJECT (gimp->documents));
gimp->documents = NULL;
}
}
void
gimp_documents_load (Gimp *gimp)
{
gchar *filename;
g_return_if_fail (GIMP_IS_GIMP (gimp));
filename = gimp_personal_rc_file ("documents");
gimprc_parse_file (filename);
g_free (filename);
}
static void
gimp_documents_save_func (GimpImagefile *imagefile,
FILE *fp)
{
fprintf (fp, "(document \"%s\")\n", GIMP_OBJECT (imagefile)->name);
}
void
gimp_documents_save (Gimp *gimp)
{
gchar *tmp_filename = NULL;
gchar *bak_filename = NULL;
gchar *rc_filename = NULL;
FILE *fp;
tmp_filename = gimp_personal_rc_file ("#documents.tmp~");
bak_filename = gimp_personal_rc_file ("documents.bak");
rc_filename = gimp_personal_rc_file ("documents");
fp = fopen (tmp_filename, "w");
if (! fp)
goto cleanup;
fprintf (fp,
"# GIMP documents\n"
"#\n"
"# This file will be entirely rewritten every time you\n"
"# quit the gimp.\n\n");
gimp_container_foreach (gimp->documents,
(GFunc) gimp_documents_save_func,
fp);
fclose (fp);
#if defined(G_OS_WIN32) || defined(__EMX__)
/* First rename the old documents out of the way */