diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 5 | ||||
-rw-r--r-- | gtk/gtkclipboard.c | 76 | ||||
-rw-r--r-- | gtk/gtkclipboard.h | 5 |
8 files changed, 110 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Tue Sep 24 18:18:36 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkclipboard.[ch]: Make a GObject (#75970, James + Henstridge) + Tue Sep 24 19:45:55 2002 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_colormap): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 545c28bc27..cef950f09b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Tue Sep 24 18:18:36 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkclipboard.[ch]: Make a GObject (#75970, James + Henstridge) + Tue Sep 24 19:45:55 2002 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_colormap): diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 545c28bc27..cef950f09b 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,8 @@ +Tue Sep 24 18:18:36 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkclipboard.[ch]: Make a GObject (#75970, James + Henstridge) + Tue Sep 24 19:45:55 2002 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_colormap): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 545c28bc27..cef950f09b 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Tue Sep 24 18:18:36 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkclipboard.[ch]: Make a GObject (#75970, James + Henstridge) + Tue Sep 24 19:45:55 2002 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_colormap): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 545c28bc27..cef950f09b 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Tue Sep 24 18:18:36 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkclipboard.[ch]: Make a GObject (#75970, James + Henstridge) + Tue Sep 24 19:45:55 2002 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_colormap): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 545c28bc27..cef950f09b 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Tue Sep 24 18:18:36 2002 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkclipboard.[ch]: Make a GObject (#75970, James + Henstridge) + Tue Sep 24 19:45:55 2002 Owen Taylor <otaylor@redhat.com> * gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_get_colormap): diff --git a/gtk/gtkclipboard.c b/gtk/gtkclipboard.c index a01e5bc3ae..4258054630 100644 --- a/gtk/gtkclipboard.c +++ b/gtk/gtkclipboard.c @@ -34,11 +34,15 @@ #include "win32/gdkwin32.h" #endif +typedef struct _GtkClipboardClass GtkClipboardClass; + typedef struct _RequestContentsInfo RequestContentsInfo; typedef struct _RequestTextInfo RequestTextInfo; struct _GtkClipboard { + GObjectClass parent_instance; + GdkAtom selection; GtkClipboardGetFunc get_func; @@ -52,6 +56,11 @@ struct _GtkClipboard GdkDisplay *display; }; +struct _GtkClipboardClass +{ + GObjectClass parent_class; +}; + struct _RequestContentsInfo { GtkClipboardReceivedFunc callback; @@ -64,6 +73,9 @@ struct _RequestTextInfo gpointer user_data; }; +static void gtk_clipboard_class_init (GtkClipboardClass *class); +static void gtk_clipboard_finalize (GObject *object); + static void clipboard_unset (GtkClipboard *clipboard); static void selection_received (GtkWidget *widget, GtkSelectionData *selection_data, @@ -81,7 +93,66 @@ static GQuark request_contents_key_id = 0; static const gchar *clipboards_owned_key = "gtk-clipboards-owned"; static GQuark clipboards_owned_key_id = 0; + +GObjectClass *parent_class; + +GType +gtk_clipboard_get_type (void) +{ + static GType clipboard_type = 0; + if (!clipboard_type) + { + static const GTypeInfo clipboard_info = + { + sizeof (GtkClipboardClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) gtk_clipboard_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GtkClipboard), + 0, /* n_preallocs */ + (GInstanceInitFunc) NULL, + }; + + clipboard_type = g_type_register_static (G_TYPE_OBJECT, "GtkClipboard", &clipboard_info, 0); + } + + return clipboard_type; +} + +static void +gtk_clipboard_class_init (GtkClipboardClass *class) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (class); + + parent_class = g_type_class_peek_parent (class); + + gobject_class->finalize = gtk_clipboard_finalize; +} + +static void +gtk_clipboard_finalize (GObject *object) +{ + clipboard_unset (GTK_CLIPBOARD (object)); +} + +static void +clipboard_display_closed (GdkDisplay *display, + gboolean is_error, + GtkClipboard *clipboard) +{ + GSList *clipboards; + + clipboards = g_object_get_data (G_OBJECT (display), "gtk-clipboard-list"); + g_object_run_dispose (G_OBJECT (clipboard)); + g_object_unref (clipboard); + clipboards = g_slist_remove (clipboards, clipboard); + + g_object_set_data (G_OBJECT (display), "gtk-clipboard-list", clipboards); +} + /** * gtk_clipboard_get_for_display: * @display: the display for which the clipboard is to be retrieved or created @@ -128,6 +199,7 @@ gtk_clipboard_get_for_display (GdkDisplay *display, GdkAtom selection) GSList *tmp_list; g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL); + g_return_val_if_fail (!display->closed, NULL); if (selection == GDK_NONE) selection = GDK_SELECTION_CLIPBOARD; @@ -146,11 +218,13 @@ gtk_clipboard_get_for_display (GdkDisplay *display, GdkAtom selection) if (!tmp_list) { - clipboard = g_new0 (GtkClipboard, 1); + clipboard = g_object_new (GTK_TYPE_CLIPBOARD, NULL); clipboard->selection = selection; clipboard->display = display; clipboards = g_slist_prepend (clipboards, clipboard); g_object_set_data (G_OBJECT (display), "gtk-clipboard-list", clipboards); + g_signal_connect (display, "closed", + G_CALLBACK (clipboard_display_closed), clipboard); } return clipboard; diff --git a/gtk/gtkclipboard.h b/gtk/gtkclipboard.h index fa0b01360b..52c3978bf9 100644 --- a/gtk/gtkclipboard.h +++ b/gtk/gtkclipboard.h @@ -28,6 +28,9 @@ extern "C" { #include <gtk/gtkselection.h> +#define GTK_TYPE_CLIPBOARD (gtk_clipboard_get_type ()) +#define GTK_CLIPBOARD(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_CLIPBOARD, GtkClipboard)) +#define GTK_IS_CLIPBOARD(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_CLIPBOARD)) typedef void (* GtkClipboardReceivedFunc) (GtkClipboard *clipboard, GtkSelectionData *selection_data, @@ -47,6 +50,8 @@ typedef void (* GtkClipboardGetFunc) (GtkClipboard *clipboard, typedef void (* GtkClipboardClearFunc) (GtkClipboard *clipboard, gpointer user_data_or_owner); +GType gtk_clipboard_get_type (void); + GtkClipboard *gtk_clipboard_get_for_display (GdkDisplay *display, GdkAtom selection); #ifndef GDK_MULTIHEAD_SAFE |