Move "disp_count" and "instance_count" to GimpImagePrivate

and add the neccessary API to access and modify them.
This commit is contained in:
Michael Natterer 2010-02-03 21:20:29 +01:00
parent 8e31261caa
commit 0b2c804e9d
12 changed files with 91 additions and 31 deletions

View file

@ -75,18 +75,24 @@ void
images_actions_update (GimpActionGroup *group,
gpointer data)
{
GimpContext *context = action_data_get_context (data);
GimpImage *image = NULL;
GimpContext *context = action_data_get_context (data);
GimpImage *image = NULL;
gint disp_count = 0;
if (context)
image = gimp_context_get_image (context);
{
image = gimp_context_get_image (context);
if (image)
disp_count = gimp_image_get_display_count (image);
}
#define SET_SENSITIVE(action,condition) \
gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
SET_SENSITIVE ("images-raise-views", image);
SET_SENSITIVE ("images-new-view", image);
SET_SENSITIVE ("images-delete", image && image->disp_count == 0);
SET_SENSITIVE ("images-delete", image && disp_count == 0);
#undef SET_SENSITIVE
}

View file

@ -104,7 +104,7 @@ images_delete_image_cmd_callback (GtkAction *action,
if (image && gimp_container_have (container, GIMP_OBJECT (image)))
{
if (image->disp_count == 0)
if (gimp_image_get_display_count (image) == 0)
g_object_unref (image);
}
}

View file

@ -44,6 +44,9 @@ struct _GimpImagePrivate
gint export_dirty; /* 'dirty' but for export */
gint undo_freeze_count; /* counts the _freeze's */
gint instance_count; /* number of instances */
gint disp_count; /* number of displays */
};
#define GIMP_IMAGE_GET_PRIVATE(image) \

View file

@ -607,8 +607,8 @@ gimp_image_init (GimpImage *image)
private->export_dirty = 1;
image->instance_count = 0;
image->disp_count = 0;
private->instance_count = 0;
private->disp_count = 0;
image->tattoo_state = 0;
@ -2228,6 +2228,49 @@ gimp_image_flush (GimpImage *image)
}
/* display / instance counters */
gint
gimp_image_get_display_count (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), 0);
return GIMP_IMAGE_GET_PRIVATE (image)->disp_count;
}
void
gimp_image_inc_display_count (GimpImage *image)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
GIMP_IMAGE_GET_PRIVATE (image)->disp_count++;
}
void
gimp_image_dec_display_count (GimpImage *image)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
GIMP_IMAGE_GET_PRIVATE (image)->disp_count--;
}
gint
gimp_image_get_instance_count (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), 0);
return GIMP_IMAGE_GET_PRIVATE (image)->instance_count;
}
void
gimp_image_inc_instance_count (GimpImage *image)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
GIMP_IMAGE_GET_PRIVATE (image)->instance_count++;
}
/* color transforms / utilities */
void

View file

@ -105,9 +105,6 @@ struct _GimpImage
Gimp *gimp; /* the GIMP the image belongs to*/
gint instance_count; /* number of instances */
gint disp_count; /* number of displays */
GimpTattoo tattoo_state; /* the last used tattoo */
GimpProjection *projection; /* projection layers & channels */
@ -344,6 +341,16 @@ gint gimp_image_get_dirty_time (const GimpImage *image);
void gimp_image_flush (GimpImage *image);
/* display / instance counters */
gint gimp_image_get_display_count (const GimpImage *image);
void gimp_image_inc_display_count (GimpImage *image);
void gimp_image_dec_display_count (GimpImage *image);
gint gimp_image_get_instance_count (const GimpImage *image);
void gimp_image_inc_instance_count (GimpImage *image);
/* color transforms / utilities */
void gimp_image_get_foreground (const GimpImage *image,

View file

@ -60,8 +60,8 @@ gimp_displays_image_dirty_callback (GimpImage *image,
GimpDirtyMask dirty_mask,
GimpContainer *container)
{
if (gimp_image_is_dirty (image) &&
image->disp_count > 0 &&
if (gimp_image_is_dirty (image) &&
gimp_image_get_display_count (image) > 0 &&
! gimp_container_have (container, GIMP_OBJECT (image)))
gimp_container_add (container, GIMP_OBJECT (image));
}
@ -133,7 +133,7 @@ gimp_displays_get_dirty_images (Gimp *gimp)
GimpImage *image = list->data;
if (gimp_image_is_dirty (image) &&
image->disp_count > 0)
gimp_image_get_display_count (image) > 0)
gimp_container_add (container, GIMP_OBJECT (image));
}

View file

@ -622,7 +622,7 @@ gimp_display_set_image (GimpDisplay *display,
gimp_display_disconnect (display);
display->image->disp_count--;
gimp_image_inc_display_count (display->image);
/* set display->image before unrefing because there may be code
* that listens for image removals and then iterates the
@ -647,9 +647,10 @@ gimp_display_set_image (GimpDisplay *display,
g_object_ref (image);
private->instance = image->instance_count++;
private->instance = gimp_image_get_instance_count (image);
gimp_image_inc_instance_count (image);
image->disp_count++;
gimp_image_dec_display_count (image);
gimp_display_connect (display);

View file

@ -85,10 +85,10 @@ gimp_display_shell_close (GimpDisplayShell *shell,
* it before nuking it--this only applies if its the last view
* to an image canvas. (a image with disp_count = 1)
*/
if (! kill_it &&
image &&
image->disp_count == 1 &&
gimp_image_is_dirty (image) &&
if (! kill_it &&
image &&
gimp_image_get_display_count (image) == 1 &&
gimp_image_is_dirty (image) &&
shell->display->config->confirm_on_close)
{
/* If there's a save dialog active for this image, then raise it.
@ -238,7 +238,7 @@ static gboolean
gimp_display_shell_close_time_changed (GimpMessageBox *box)
{
GimpImage *image = g_object_get_data (G_OBJECT (box), "gimp-image");
gint *dirty_time = gimp_image_get_dirty_time (image);
gint dirty_time = gimp_image_get_dirty_time (image);
if (dirty_time)
{

View file

@ -79,7 +79,7 @@ display_new_invoker (GimpProcedure *procedure,
if (display)
{
/* the first display takes ownership of the image */
if (image->disp_count == 1)
if (gimp_image_get_display_count (image) == 1)
g_object_unref (image);
}
else
@ -179,15 +179,15 @@ displays_reconnect_invoker (GimpProcedure *procedure,
if (success)
{
success = (old_image != new_image &&
old_image->disp_count > 0 &&
new_image->disp_count == 0);
gimp_image_get_display_count (old_image) > 0 &&
gimp_image_get_display_count (new_image) == 0);
if (success)
{
gimp_reconnect_displays (gimp, old_image, new_image);
/* take ownership of the image */
if (new_image->disp_count > 0)
if (gimp_image_get_display_count (new_image) > 0)
g_object_unref (new_image);
}
}

View file

@ -210,7 +210,7 @@ image_delete_invoker (GimpProcedure *procedure,
if (success)
{
if (image->disp_count == 0)
if (gimp_image_get_display_count (image) == 0)
g_object_unref (image);
else
success = FALSE;

View file

@ -78,7 +78,7 @@ HELP
if (display)
{
/* the first display takes ownership of the image */
if (image->disp_count == 1)
if (gimp_image_get_display_count (image) == 1)
g_object_unref (image);
}
else
@ -192,15 +192,15 @@ HELP
code => <<'CODE'
{
success = (old_image != new_image &&
old_image->disp_count > 0 &&
new_image->disp_count == 0);
gimp_image_get_display_count (old_image) > 0 &&
gimp_image_get_display_count (new_image) == 0);
if (success)
{
gimp_reconnect_displays (gimp, old_image, new_image);
/* take ownership of the image */
if (new_image->disp_count > 0)
if (gimp_image_get_display_count (new_image) > 0)
g_object_unref (new_image);
}
}

View file

@ -177,7 +177,7 @@ HELP
%invoke = (
code => <<'CODE'
{
if (image->disp_count == 0)
if (gimp_image_get_display_count (image) == 0)
g_object_unref (image);
else
success = FALSE;