clipboard: Make a bunch of functions vfuncs

This commit is contained in:
Benjamin Otte 2013-08-20 14:44:14 +02:00
parent 4009c8241b
commit aee5bcf9e2
2 changed files with 100 additions and 17 deletions

View File

@ -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,
@ -929,15 +965,27 @@ gtk_clipboard_request_contents (GtkClipboard *clipboard,
GdkAtom target,
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))
@ -1985,6 +2033,19 @@ void
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;
@ -1992,9 +2053,6 @@ gtk_clipboard_set_can_store (GtkClipboard *clipboard,
{ "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;

View File

@ -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__ */