Add some infrastructure that will be used soon:
2008-04-17 Michael Natterer <mitch@gimp.org> Add some infrastructure that will be used soon: * app/plug-in/gimppluginprocframe.[ch]: replace "cleanup" list by two lists "image_cleanups" and "item_cleanups" and call gimp_plug_in_cleanup() if any of them is non-NULL. * app/plug-in/gimpplugin-cleanup.c: add private new() and free() functions for GimpPlugInCleanupImage structs and add the same infrastructure for GimpPlugInCleanupItem structs which are currently unused. svn path=/trunk/; revision=25497
This commit is contained in:
committed by
Michael Natterer
parent
f51e5232a7
commit
7aa177fa01
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
2008-04-17 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
|
Add some infrastructure that will be used soon:
|
||||||
|
|
||||||
|
* app/plug-in/gimppluginprocframe.[ch]: replace "cleanup" list
|
||||||
|
by two lists "image_cleanups" and "item_cleanups" and call
|
||||||
|
gimp_plug_in_cleanup() if any of them is non-NULL.
|
||||||
|
|
||||||
|
* app/plug-in/gimpplugin-cleanup.c: add private new() and free()
|
||||||
|
functions for GimpPlugInCleanupImage structs and add the same
|
||||||
|
infrastructure for GimpPlugInCleanupItem structs which are
|
||||||
|
currently unused.
|
||||||
|
|
||||||
2008-04-17 Michael Natterer <mitch@gimp.org>
|
2008-04-17 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* configure.in: add G_DISABLE_SINGLE_INCLUDES to CPPFLAGS.
|
* configure.in: add G_DISABLE_SINGLE_INCLUDES to CPPFLAGS.
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
#include "core/gimpcontainer.h"
|
#include "core/gimpcontainer.h"
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
#include "core/gimpimage-undo.h"
|
#include "core/gimpimage-undo.h"
|
||||||
#include "core/gimpdrawable.h"
|
#include "core/gimpitem.h"
|
||||||
#include "core/gimpundostack.h"
|
#include "core/gimpundostack.h"
|
||||||
|
|
||||||
#include "gimpplugin.h"
|
#include "gimpplugin.h"
|
||||||
@ -42,16 +42,37 @@ typedef struct _GimpPlugInCleanupImage GimpPlugInCleanupImage;
|
|||||||
struct _GimpPlugInCleanupImage
|
struct _GimpPlugInCleanupImage
|
||||||
{
|
{
|
||||||
GimpImage *image;
|
GimpImage *image;
|
||||||
|
gint image_ID;
|
||||||
|
|
||||||
gint undo_group_count;
|
gint undo_group_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _GimpPlugInCleanupItem GimpPlugInCleanupItem;
|
||||||
|
|
||||||
|
struct _GimpPlugInCleanupItem
|
||||||
|
{
|
||||||
|
GimpItem *item;
|
||||||
|
gint item_ID;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* local function prototypes */
|
/* local function prototypes */
|
||||||
|
|
||||||
static GimpPlugInCleanupImage *
|
static GimpPlugInCleanupImage *
|
||||||
gimp_plug_in_cleanup_get_image (GimpPlugInProcFrame *proc_frame,
|
gimp_plug_in_cleanup_image_new (GimpImage *image);
|
||||||
|
static void gimp_plug_in_cleanup_image_free (GimpPlugInCleanupImage *cleanup);
|
||||||
|
static GimpPlugInCleanupImage *
|
||||||
|
gimp_plug_in_cleanup_image_get (GimpPlugInProcFrame *proc_frame,
|
||||||
GimpImage *image);
|
GimpImage *image);
|
||||||
|
|
||||||
|
static GimpPlugInCleanupItem *
|
||||||
|
gimp_plug_in_cleanup_item_new (GimpItem *item);
|
||||||
|
static void gimp_plug_in_cleanup_item_free (GimpPlugInCleanupItem *item);
|
||||||
|
static GimpPlugInCleanupItem *
|
||||||
|
gimp_plug_in_cleanup_item_get (GimpPlugInProcFrame *proc_frame,
|
||||||
|
GimpItem *item);
|
||||||
|
|
||||||
|
|
||||||
/* public functions */
|
/* public functions */
|
||||||
|
|
||||||
@ -66,16 +87,16 @@ gimp_plug_in_cleanup_undo_group_start (GimpPlugIn *plug_in,
|
|||||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||||
|
|
||||||
proc_frame = gimp_plug_in_get_proc_frame (plug_in);
|
proc_frame = gimp_plug_in_get_proc_frame (plug_in);
|
||||||
cleanup = gimp_plug_in_cleanup_get_image (proc_frame, image);
|
cleanup = gimp_plug_in_cleanup_image_get (proc_frame, image);
|
||||||
|
|
||||||
if (! cleanup)
|
if (! cleanup)
|
||||||
{
|
{
|
||||||
cleanup = g_slice_new0 (GimpPlugInCleanupImage);
|
cleanup = gimp_plug_in_cleanup_image_new (image);
|
||||||
|
|
||||||
cleanup->image = image;
|
|
||||||
cleanup->undo_group_count = image->group_count;
|
cleanup->undo_group_count = image->group_count;
|
||||||
|
|
||||||
proc_frame->cleanups = g_list_prepend (proc_frame->cleanups, cleanup);
|
proc_frame->image_cleanups = g_list_prepend (proc_frame->image_cleanups,
|
||||||
|
cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -92,15 +113,16 @@ gimp_plug_in_cleanup_undo_group_end (GimpPlugIn *plug_in,
|
|||||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||||
|
|
||||||
proc_frame = gimp_plug_in_get_proc_frame (plug_in);
|
proc_frame = gimp_plug_in_get_proc_frame (plug_in);
|
||||||
cleanup = gimp_plug_in_cleanup_get_image (proc_frame, image);
|
cleanup = gimp_plug_in_cleanup_image_get (proc_frame, image);
|
||||||
|
|
||||||
if (! cleanup)
|
if (! cleanup)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (cleanup->undo_group_count == image->group_count - 1)
|
if (cleanup->undo_group_count == image->group_count - 1)
|
||||||
{
|
{
|
||||||
proc_frame->cleanups = g_list_remove (proc_frame->cleanups, cleanup);
|
proc_frame->image_cleanups = g_list_remove (proc_frame->image_cleanups,
|
||||||
g_slice_free (GimpPlugInCleanupImage, cleanup);
|
cleanup);
|
||||||
|
gimp_plug_in_cleanup_image_free (cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -115,17 +137,17 @@ gimp_plug_in_cleanup (GimpPlugIn *plug_in,
|
|||||||
g_return_if_fail (GIMP_IS_PLUG_IN (plug_in));
|
g_return_if_fail (GIMP_IS_PLUG_IN (plug_in));
|
||||||
g_return_if_fail (proc_frame != NULL);
|
g_return_if_fail (proc_frame != NULL);
|
||||||
|
|
||||||
for (list = proc_frame->cleanups; list; list = g_list_next (list))
|
for (list = proc_frame->image_cleanups; list; list = g_list_next (list))
|
||||||
{
|
{
|
||||||
GimpPlugInCleanupImage *cleanup = list->data;
|
GimpPlugInCleanupImage *cleanup = list->data;
|
||||||
GimpImage *image = cleanup->image;
|
GimpImage *image = cleanup->image;
|
||||||
|
|
||||||
if (! gimp_container_have (plug_in->manager->gimp->images,
|
if (gimp_image_get_by_ID (plug_in->manager->gimp,
|
||||||
(GimpObject *) image))
|
cleanup->image_ID) != image)
|
||||||
continue;
|
goto free_image_cleanup;
|
||||||
|
|
||||||
if (image->pushing_undo_group == GIMP_UNDO_GROUP_NONE)
|
if (image->pushing_undo_group == GIMP_UNDO_GROUP_NONE)
|
||||||
continue;
|
goto free_image_cleanup;
|
||||||
|
|
||||||
if (cleanup->undo_group_count != image->group_count)
|
if (cleanup->undo_group_count != image->group_count)
|
||||||
{
|
{
|
||||||
@ -143,23 +165,57 @@ gimp_plug_in_cleanup (GimpPlugIn *plug_in,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_slice_free (GimpPlugInCleanupImage, cleanup);
|
free_image_cleanup:
|
||||||
|
gimp_plug_in_cleanup_image_free (cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (proc_frame->cleanups);
|
g_list_free (proc_frame->image_cleanups);
|
||||||
proc_frame->cleanups = NULL;
|
proc_frame->image_cleanups = NULL;
|
||||||
|
|
||||||
|
for (list = proc_frame->item_cleanups; list; list = g_list_next (list))
|
||||||
|
{
|
||||||
|
GimpPlugInCleanupItem *cleanup = list->data;
|
||||||
|
GimpItem *item = cleanup->item;
|
||||||
|
|
||||||
|
if (gimp_item_get_by_ID (plug_in->manager->gimp,
|
||||||
|
cleanup->item_ID) != item)
|
||||||
|
goto free_item_cleanup;
|
||||||
|
|
||||||
|
free_item_cleanup:
|
||||||
|
gimp_plug_in_cleanup_item_free (cleanup);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_list_free (proc_frame->item_cleanups);
|
||||||
|
proc_frame->item_cleanups = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* private functions */
|
/* private functions */
|
||||||
|
|
||||||
static GimpPlugInCleanupImage *
|
static GimpPlugInCleanupImage *
|
||||||
gimp_plug_in_cleanup_get_image (GimpPlugInProcFrame *proc_frame,
|
gimp_plug_in_cleanup_image_new (GimpImage *image)
|
||||||
|
{
|
||||||
|
GimpPlugInCleanupImage *cleanup = g_slice_new0 (GimpPlugInCleanupImage);
|
||||||
|
|
||||||
|
cleanup->image = image;
|
||||||
|
cleanup->image_ID = gimp_image_get_ID (image);
|
||||||
|
|
||||||
|
return cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_plug_in_cleanup_image_free (GimpPlugInCleanupImage *cleanup)
|
||||||
|
{
|
||||||
|
g_slice_free (GimpPlugInCleanupImage, cleanup);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GimpPlugInCleanupImage *
|
||||||
|
gimp_plug_in_cleanup_image_get (GimpPlugInProcFrame *proc_frame,
|
||||||
GimpImage *image)
|
GimpImage *image)
|
||||||
{
|
{
|
||||||
GList *list;
|
GList *list;
|
||||||
|
|
||||||
for (list = proc_frame->cleanups; list; list = g_list_next (list))
|
for (list = proc_frame->image_cleanups; list; list = g_list_next (list))
|
||||||
{
|
{
|
||||||
GimpPlugInCleanupImage *cleanup = list->data;
|
GimpPlugInCleanupImage *cleanup = list->data;
|
||||||
|
|
||||||
@ -169,3 +225,37 @@ gimp_plug_in_cleanup_get_image (GimpPlugInProcFrame *proc_frame,
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GimpPlugInCleanupItem *
|
||||||
|
gimp_plug_in_cleanup_item_new (GimpItem *item)
|
||||||
|
{
|
||||||
|
GimpPlugInCleanupItem *cleanup = g_slice_new0 (GimpPlugInCleanupItem);
|
||||||
|
|
||||||
|
cleanup->item = item;
|
||||||
|
cleanup->item_ID = gimp_item_get_ID (item);
|
||||||
|
|
||||||
|
return cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_plug_in_cleanup_item_free (GimpPlugInCleanupItem *cleanup)
|
||||||
|
{
|
||||||
|
g_slice_free (GimpPlugInCleanupItem, cleanup);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GimpPlugInCleanupItem *
|
||||||
|
gimp_plug_in_cleanup_item_get (GimpPlugInProcFrame *proc_frame,
|
||||||
|
GimpItem *item)
|
||||||
|
{
|
||||||
|
GList *list;
|
||||||
|
|
||||||
|
for (list = proc_frame->item_cleanups; list; list = g_list_next (list))
|
||||||
|
{
|
||||||
|
GimpPlugInCleanupItem *cleanup = list->data;
|
||||||
|
|
||||||
|
if (cleanup->item == item)
|
||||||
|
return cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|||||||
@ -125,7 +125,7 @@ gimp_plug_in_proc_frame_dispose (GimpPlugInProcFrame *proc_frame,
|
|||||||
proc_frame->main_loop = NULL;
|
proc_frame->main_loop = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (proc_frame->cleanups)
|
if (proc_frame->image_cleanups || proc_frame->item_cleanups)
|
||||||
gimp_plug_in_cleanup (plug_in, proc_frame);
|
gimp_plug_in_cleanup (plug_in, proc_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,8 @@ struct _GimpPlugInProcFrame
|
|||||||
gulong progress_cancel_id;
|
gulong progress_cancel_id;
|
||||||
|
|
||||||
/* lists of things to clean up on dispose */
|
/* lists of things to clean up on dispose */
|
||||||
GList *cleanups;
|
GList *image_cleanups;
|
||||||
|
GList *item_cleanups;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user