mirror of https://github.com/GNOME/gimp.git
Issue #1441 - Copy paste issue, internal clipboard blocks global clipboard
Never return an internal image/buffer/svg/curve from any gimp_clipboard function if we are not the owner of the display's clipboard. The clipboard is supposed to be a global thing, and we must only offer to ourselves what would be pasted in any other app.
This commit is contained in:
parent
5c17d2a43b
commit
7d3a129ddd
|
@ -245,12 +245,16 @@ gimp_clipboard_has_image (Gimp *gimp)
|
|||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
gimp_clipboard_wait_for_image (gimp) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
if (gimp_clipboard_wait_for_image (gimp) != GDK_NONE)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
return (gimp_clip->image != NULL);
|
||||
|
@ -280,12 +284,16 @@ gimp_clipboard_has_buffer (Gimp *gimp)
|
|||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
gimp_clipboard_wait_for_buffer (gimp) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
if (gimp_clipboard_wait_for_buffer (gimp) != GDK_NONE)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
return (gimp_clip->buffer != NULL);
|
||||
|
@ -313,12 +321,16 @@ gimp_clipboard_has_svg (Gimp *gimp)
|
|||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
gimp_clipboard_wait_for_svg (gimp) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
if (gimp_clipboard_wait_for_svg (gimp) != GDK_NONE)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
return (gimp_clip->svg != NULL);
|
||||
|
@ -346,12 +358,16 @@ gimp_clipboard_has_curve (Gimp *gimp)
|
|||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
gimp_clipboard_wait_for_curve (gimp) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
if (gimp_clipboard_wait_for_curve (gimp) != GDK_NONE)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
return (gimp_clip->curve != NULL);
|
||||
|
@ -402,7 +418,6 @@ gimp_clipboard_get_image (Gimp *gimp)
|
|||
{
|
||||
GimpClipboard *gimp_clip;
|
||||
GtkClipboard *clipboard;
|
||||
GdkAtom atom;
|
||||
GimpImage *image = NULL;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
|
@ -411,8 +426,11 @@ gimp_clipboard_get_image (Gimp *gimp)
|
|||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
(atom = gimp_clipboard_wait_for_image (gimp)) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
GdkAtom atom = gimp_clipboard_wait_for_image (gimp);
|
||||
|
||||
if (atom != GDK_NONE)
|
||||
{
|
||||
GtkSelectionData *data;
|
||||
|
||||
|
@ -430,6 +448,9 @@ gimp_clipboard_get_image (Gimp *gimp)
|
|||
gimp_unset_busy (gimp);
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
if (! image && gimp_clip->image)
|
||||
|
@ -456,7 +477,6 @@ gimp_clipboard_get_buffer (Gimp *gimp)
|
|||
{
|
||||
GimpClipboard *gimp_clip;
|
||||
GtkClipboard *clipboard;
|
||||
GdkAtom atom;
|
||||
GimpBuffer *buffer = NULL;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
|
@ -465,8 +485,11 @@ gimp_clipboard_get_buffer (Gimp *gimp)
|
|||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
(atom = gimp_clipboard_wait_for_buffer (gimp)) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
GdkAtom atom = gimp_clipboard_wait_for_buffer (gimp);
|
||||
|
||||
if (atom != GDK_NONE)
|
||||
{
|
||||
GtkSelectionData *data;
|
||||
|
||||
|
@ -491,6 +514,9 @@ gimp_clipboard_get_buffer (Gimp *gimp)
|
|||
gimp_unset_busy (gimp);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
if (! buffer && gimp_clip->buffer)
|
||||
|
@ -518,18 +544,22 @@ gimp_clipboard_get_svg (Gimp *gimp,
|
|||
{
|
||||
GimpClipboard *gimp_clip;
|
||||
GtkClipboard *clipboard;
|
||||
GdkAtom atom;
|
||||
gchar *svg = NULL;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
g_return_val_if_fail (svg_length != NULL, NULL);
|
||||
|
||||
*svg_length = 0;
|
||||
|
||||
clipboard = gtk_clipboard_get_for_display (gdk_display_get_default (),
|
||||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
(atom = gimp_clipboard_wait_for_svg (gimp)) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
GdkAtom atom = gimp_clipboard_wait_for_svg (gimp);
|
||||
|
||||
if (atom != GDK_NONE)
|
||||
{
|
||||
GtkSelectionData *data;
|
||||
|
||||
|
@ -552,6 +582,9 @@ gimp_clipboard_get_svg (Gimp *gimp,
|
|||
gimp_unset_busy (gimp);
|
||||
}
|
||||
|
||||
return svg;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
if (! svg && gimp_clip->svg)
|
||||
|
@ -580,7 +613,6 @@ gimp_clipboard_get_curve (Gimp *gimp)
|
|||
{
|
||||
GimpClipboard *gimp_clip;
|
||||
GtkClipboard *clipboard;
|
||||
GdkAtom atom;
|
||||
GimpCurve *curve = NULL;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
|
@ -589,8 +621,11 @@ gimp_clipboard_get_curve (Gimp *gimp)
|
|||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (clipboard &&
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp) &&
|
||||
(atom = gimp_clipboard_wait_for_curve (gimp)) != GDK_NONE)
|
||||
gtk_clipboard_get_owner (clipboard) != G_OBJECT (gimp))
|
||||
{
|
||||
GdkAtom atom = gimp_clipboard_wait_for_curve (gimp);
|
||||
|
||||
if (atom != GDK_NONE)
|
||||
{
|
||||
GtkSelectionData *data;
|
||||
|
||||
|
@ -608,6 +643,9 @@ gimp_clipboard_get_curve (Gimp *gimp)
|
|||
gimp_unset_busy (gimp);
|
||||
}
|
||||
|
||||
return curve;
|
||||
}
|
||||
|
||||
gimp_clip = gimp_clipboard_get (gimp);
|
||||
|
||||
if (! curve && gimp_clip->curve)
|
||||
|
|
Loading…
Reference in New Issue