diff options
-rw-r--r-- | gtk/gtkclipboard.c | 94 | ||||
-rw-r--r-- | gtk/gtkclipboardprivate.h | 23 |
2 files changed, 100 insertions, 17 deletions
diff --git a/gtk/gtkclipboard.c b/gtk/gtkclipboard.c index 6ef8d7dcb2..24073523cf 100644 --- a/gtk/gtkclipboard.c +++ b/gtk/gtkclipboard.c @@ -163,6 +163,23 @@ static void gtk_clipboard_class_init (GtkClipboardClass *class); static void gtk_clipboard_finalize (GObject *object); static void gtk_clipboard_owner_change (GtkClipboard *clipboard, GdkEventOwnerChange *event); +static gboolean gtk_clipboard_set_contents (GtkClipboard *clipboard, + const GtkTargetEntry *targets, + guint n_targets, + GtkClipboardGetFunc get_func, + GtkClipboardClearFunc clear_func, + gpointer user_data, + gboolean have_owner); +static void gtk_clipboard_real_clear (GtkClipboard *clipboard); +static void gtk_clipboard_real_request_contents (GtkClipboard *clipboard, + GdkAtom target, + GtkClipboardReceivedFunc callback, + gpointer user_data); +static void gtk_clipboard_real_set_can_store (GtkClipboard *clipboard, + const GtkTargetEntry *targets, + gint n_targets); +static void gtk_clipboard_real_store (GtkClipboard *clipboard); + static void clipboard_unset (GtkClipboard *clipboard); static void selection_received (GtkWidget *widget, @@ -204,6 +221,11 @@ gtk_clipboard_class_init (GtkClipboardClass *class) gobject_class->finalize = gtk_clipboard_finalize; + class->set_contents = gtk_clipboard_set_contents; + class->clear = gtk_clipboard_real_clear; + class->request_contents = gtk_clipboard_real_request_contents; + class->set_can_store = gtk_clipboard_real_set_can_store; + class->store = gtk_clipboard_real_store; class->owner_change = gtk_clipboard_owner_change; /** @@ -629,9 +651,13 @@ gtk_clipboard_set_with_data (GtkClipboard *clipboard, g_return_val_if_fail (targets != NULL, FALSE); g_return_val_if_fail (get_func != NULL, FALSE); - return gtk_clipboard_set_contents (clipboard, targets, n_targets, - get_func, clear_func, user_data, - FALSE); + return GTK_CLIPBOARD_GET_CLASS (clipboard)->set_contents (clipboard, + targets, + n_targets, + get_func, + clear_func, + user_data, + FALSE); } /** @@ -672,9 +698,13 @@ gtk_clipboard_set_with_owner (GtkClipboard *clipboard, g_return_val_if_fail (get_func != NULL, FALSE); g_return_val_if_fail (G_IS_OBJECT (owner), FALSE); - return gtk_clipboard_set_contents (clipboard, targets, n_targets, - get_func, clear_func, owner, - TRUE); + return GTK_CLIPBOARD_GET_CLASS (clipboard)->set_contents (clipboard, + targets, + n_targets, + get_func, + clear_func, + owner, + TRUE); } /** @@ -753,6 +783,12 @@ gtk_clipboard_clear (GtkClipboard *clipboard) { g_return_if_fail (clipboard != NULL); + GTK_CLIPBOARD_GET_CLASS (clipboard)->clear (clipboard); +} + +static void +gtk_clipboard_real_clear (GtkClipboard *clipboard) +{ if (clipboard->have_selection) gtk_selection_owner_set_for_display (clipboard->display, NULL, @@ -930,14 +966,26 @@ gtk_clipboard_request_contents (GtkClipboard *clipboard, GtkClipboardReceivedFunc callback, gpointer user_data) { + g_return_if_fail (clipboard != NULL); + g_return_if_fail (target != GDK_NONE); + g_return_if_fail (callback != NULL); + + GTK_CLIPBOARD_GET_CLASS (clipboard)->request_contents (clipboard, + target, + callback, + user_data); +} + +static void +gtk_clipboard_real_request_contents (GtkClipboard *clipboard, + GdkAtom target, + GtkClipboardReceivedFunc callback, + gpointer user_data) +{ RequestContentsInfo *info; GtkWidget *widget; GtkWidget *clipboard_widget; - g_return_if_fail (clipboard != NULL); - g_return_if_fail (target != GDK_NONE); - g_return_if_fail (callback != NULL); - clipboard_widget = get_clipboard_widget (clipboard->display); if (get_request_contents_info (clipboard_widget)) @@ -1986,15 +2034,25 @@ gtk_clipboard_set_can_store (GtkClipboard *clipboard, const GtkTargetEntry *targets, gint n_targets) { + g_return_if_fail (GTK_IS_CLIPBOARD (clipboard)); + g_return_if_fail (n_targets >= 0); + + GTK_CLIPBOARD_GET_CLASS (clipboard)->set_can_store (clipboard, + targets, + n_targets); +} + +static void +gtk_clipboard_real_set_can_store (GtkClipboard *clipboard, + const GtkTargetEntry *targets, + gint n_targets) +{ GtkWidget *clipboard_widget; int i; static const GtkTargetEntry save_targets[] = { { "SAVE_TARGETS", 0, TARGET_SAVE_TARGETS } }; - g_return_if_fail (GTK_IS_CLIPBOARD (clipboard)); - g_return_if_fail (n_targets >= 0); - if (clipboard->selection != GDK_SELECTION_CLIPBOARD) return; @@ -2047,10 +2105,16 @@ gtk_clipboard_selection_notify (GtkWidget *widget, void gtk_clipboard_store (GtkClipboard *clipboard) { - GtkWidget *clipboard_widget; - g_return_if_fail (GTK_IS_CLIPBOARD (clipboard)); + GTK_CLIPBOARD_GET_CLASS (clipboard)->store (clipboard); +} + +static void +gtk_clipboard_real_store (GtkClipboard *clipboard) +{ + GtkWidget *clipboard_widget; + if (clipboard->n_storable_targets < 0) return; diff --git a/gtk/gtkclipboardprivate.h b/gtk/gtkclipboardprivate.h index 788bf75950..48e1b05997 100644 --- a/gtk/gtkclipboardprivate.h +++ b/gtk/gtkclipboardprivate.h @@ -59,8 +59,27 @@ struct _GtkClipboardClass { GObjectClass parent_class; - void (*owner_change) (GtkClipboard *clipboard, - GdkEventOwnerChange *event); + /* vfuncs */ + gboolean (* set_contents) (GtkClipboard *clipboard, + const GtkTargetEntry *targets, + guint n_targets, + GtkClipboardGetFunc get_func, + GtkClipboardClearFunc clear_func, + gpointer user_data, + gboolean have_owner); + void (* clear) (GtkClipboard *clipboard); + void (* request_contents) (GtkClipboard *clipboard, + GdkAtom target, + GtkClipboardReceivedFunc callback, + gpointer user_data); + void (* set_can_store) (GtkClipboard *clipboard, + const GtkTargetEntry *targets, + gint n_targets); + void (* store) (GtkClipboard *clipboard); + + /* signals */ + void (* owner_change) (GtkClipboard *clipboard, + GdkEventOwnerChange *event); }; #endif /* __GTK_CLIPBOARD_PRIVATE_H__ */ |