app: add gimp->clipboard_image and API to set/get it

This commit is contained in:
Michael Natterer 2016-09-19 20:13:39 +02:00
parent f0acb3301a
commit 7130ba95e1
2 changed files with 59 additions and 5 deletions

View File

@ -432,6 +432,12 @@ gimp_finalize (GObject *object)
gimp->clipboard_buffer = NULL;
}
if (gimp->clipboard_image)
{
g_object_unref (gimp->clipboard_image);
gimp->clipboard_image = NULL;
}
if (gimp->displays)
{
g_object_unref (gimp->displays);
@ -536,8 +542,12 @@ gimp_get_memsize (GimpObject *object,
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->displays), gui_size);
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->clipboard_image),
gui_size);
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->clipboard_buffer),
gui_size);
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->named_buffers),
gui_size);
memsize += gimp_data_factories_get_memsize (gimp, gui_size);
@ -965,6 +975,41 @@ gimp_get_tool_info_iter (Gimp *gimp)
return GIMP_LIST (gimp->tool_info_list)->queue->head;
}
void
gimp_set_clipboard_image (Gimp *gimp,
GimpImage *image)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (image == NULL || GIMP_IS_IMAGE (image));
/* ref first, it could be the same as gimp->clipboard_image, but
* don't bail if equal because always we want the signal emission
*/
if (image)
g_object_ref (image);
if (gimp->clipboard_buffer)
{
g_object_unref (gimp->clipboard_buffer);
gimp->clipboard_buffer = NULL;
}
if (gimp->clipboard_image)
g_object_unref (gimp->clipboard_image);
gimp->clipboard_image = image;
g_signal_emit (gimp, gimp_signals[CLIPBOARD_CHANGED], 0);
}
GimpImage *
gimp_get_clipboard_image (Gimp *gimp)
{
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
return gimp->clipboard_image;
}
void
gimp_set_clipboard_buffer (Gimp *gimp,
GimpBuffer *buffer)
@ -972,17 +1017,21 @@ gimp_set_clipboard_buffer (Gimp *gimp,
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (buffer == NULL || GIMP_IS_BUFFER (buffer));
if (buffer == gimp->clipboard_buffer)
return;
/* see above */
if (buffer)
g_object_ref (buffer);
if (gimp->clipboard_image)
{
g_object_unref (gimp->clipboard_image);
gimp->clipboard_image = NULL;
}
if (gimp->clipboard_buffer)
g_object_unref (gimp->clipboard_buffer);
gimp->clipboard_buffer = buffer;
if (gimp->clipboard_buffer)
g_object_ref (gimp->clipboard_buffer);
g_signal_emit (gimp, gimp_signals[CLIPBOARD_CHANGED], 0);
}

View File

@ -89,6 +89,7 @@ struct _Gimp
GList *image_windows;
GimpImage *clipboard_image;
GimpBuffer *clipboard_buffer;
GimpContainer *named_buffers;
@ -184,6 +185,10 @@ GList * gimp_get_image_windows (Gimp *gimp);
GList * gimp_get_paint_info_iter (Gimp *gimp);
GList * gimp_get_tool_info_iter (Gimp *gimp);
void gimp_set_clipboard_image (Gimp *gimp,
GimpImage *image);
GimpImage * gimp_get_clipboard_image (Gimp *gimp);
void gimp_set_clipboard_buffer (Gimp *gimp,
GimpBuffer *buffer);
GimpBuffer * gimp_get_clipboard_buffer (Gimp *gimp);