mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-13 22:10:08 +00:00
Fix bug #486369, by passing the selection info along when pasting.
2007-11-03 Richard Hult <richard@imendio.com> * gtk/gtkclipboard-quartz.c: (clipboard_owner_destroyed), (gtk_clipboard_set_contents), (clipboard_unset): Fix bug #486369, by passing the selection info along when pasting. svn path=/trunk/; revision=18965
This commit is contained in:
parent
e518a8d6e8
commit
fd90de672b
@ -1,3 +1,9 @@
|
|||||||
|
2007-11-03 Richard Hult <richard@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkclipboard-quartz.c: (clipboard_owner_destroyed),
|
||||||
|
(gtk_clipboard_set_contents), (clipboard_unset): Fix bug #486369,
|
||||||
|
by passing the selection info along when pasting.
|
||||||
|
|
||||||
2007-11-03 Richard Hult <richard@imendio.com>
|
2007-11-03 Richard Hult <richard@imendio.com>
|
||||||
|
|
||||||
* gdk/quartz/GdkQuartzWindow.c:
|
* gdk/quartz/GdkQuartzWindow.c:
|
||||||
|
@ -53,6 +53,7 @@ struct _GtkClipboard
|
|||||||
GtkClipboardClearFunc clear_func;
|
GtkClipboardClearFunc clear_func;
|
||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
gboolean have_owner;
|
gboolean have_owner;
|
||||||
|
GtkTargetList *target_list;
|
||||||
|
|
||||||
gboolean have_selection;
|
gboolean have_selection;
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
@ -91,18 +92,26 @@ struct _GtkClipboardClass
|
|||||||
-(void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type
|
-(void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type
|
||||||
{
|
{
|
||||||
GtkSelectionData selection_data;
|
GtkSelectionData selection_data;
|
||||||
|
guint info;
|
||||||
|
|
||||||
selection_data.selection = clipboard->selection;
|
selection_data.selection = clipboard->selection;
|
||||||
selection_data.data = NULL;
|
selection_data.data = NULL;
|
||||||
selection_data.target = _gtk_quartz_pasteboard_type_to_atom (type);
|
selection_data.target = _gtk_quartz_pasteboard_type_to_atom (type);
|
||||||
|
|
||||||
/* FIXME: We need to find out what the info argument should be
|
if (clipboard->target_list &&
|
||||||
* here by storing it in the clipboard object in
|
gtk_target_list_find (clipboard->target_list, selection_data.target, &info))
|
||||||
* gtk_clipboard_set_contents
|
{
|
||||||
*/
|
clipboard->get_func (clipboard, &selection_data,
|
||||||
clipboard->get_func (clipboard, &selection_data, 0, clipboard->user_data);
|
info,
|
||||||
|
clipboard->user_data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
selection_data.length = -1;
|
||||||
|
}
|
||||||
|
|
||||||
_gtk_quartz_set_selection_data_for_pasteboard (clipboard->pasteboard, &selection_data);
|
_gtk_quartz_set_selection_data_for_pasteboard (clipboard->pasteboard,
|
||||||
|
&selection_data);
|
||||||
|
|
||||||
g_free (selection_data.data);
|
g_free (selection_data.data);
|
||||||
}
|
}
|
||||||
@ -326,6 +335,12 @@ clipboard_owner_destroyed (gpointer data)
|
|||||||
clipboard->user_data = NULL;
|
clipboard->user_data = NULL;
|
||||||
clipboard->have_owner = FALSE;
|
clipboard->have_owner = FALSE;
|
||||||
|
|
||||||
|
if (clipboard->target_list)
|
||||||
|
{
|
||||||
|
gtk_target_list_unref (clipboard->target_list);
|
||||||
|
clipboard->target_list = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
gtk_clipboard_clear (clipboard);
|
gtk_clipboard_clear (clipboard);
|
||||||
|
|
||||||
tmp_list = tmp_list->next;
|
tmp_list = tmp_list->next;
|
||||||
@ -385,11 +400,15 @@ gtk_clipboard_set_contents (GtkClipboard *clipboard,
|
|||||||
clipboard->get_func = get_func;
|
clipboard->get_func = get_func;
|
||||||
clipboard->clear_func = clear_func;
|
clipboard->clear_func = clear_func;
|
||||||
|
|
||||||
|
if (clipboard->target_list)
|
||||||
|
gtk_target_list_unref (clipboard->target_list);
|
||||||
|
clipboard->target_list = gtk_target_list_new (targets, n_targets);
|
||||||
|
|
||||||
[clipboard->pasteboard declareTypes:types owner:owner];
|
[clipboard->pasteboard declareTypes:types owner:owner];
|
||||||
|
|
||||||
[pool release];
|
[pool release];
|
||||||
|
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -521,6 +540,12 @@ clipboard_unset (GtkClipboard *clipboard)
|
|||||||
if (old_clear_func)
|
if (old_clear_func)
|
||||||
old_clear_func (clipboard, old_data);
|
old_clear_func (clipboard, old_data);
|
||||||
|
|
||||||
|
if (clipboard->target_list)
|
||||||
|
{
|
||||||
|
gtk_target_list_unref (clipboard->target_list);
|
||||||
|
clipboard->target_list = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* If we've transferred the clipboard data to the manager,
|
/* If we've transferred the clipboard data to the manager,
|
||||||
* unref the owner
|
* unref the owner
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user