From 14ec6ddec3c2b10f3142aac0cac010ed3c9daecb Mon Sep 17 00:00:00 2001 From: "Ivan, Wong Yat Cheung" Date: Wed, 2 Feb 2005 17:29:20 +0000 Subject: [PATCH] Use a FIFO list for storing GdkSelProp of a single window so that 2005-02-02 Ivan, Wong Yat Cheung * gdk/win32/gdkselection.c: Use a FIFO list for storing GdkSelProp of a single window so that gtk_clipboard_request_contents() can be called inside a GtkClipboardReceivedFunc(). (#163844) --- ChangeLog | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-8 | 6 ++++++ gdk/win32/gdkselection-win32.c | 24 +++++++++++++----------- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 86485ec470..2af69a79da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-02-02 Ivan, Wong Yat Cheung + + * gdk/win32/gdkselection.c: Use a FIFO list for storing GdkSelProp + of a single window so that gtk_clipboard_request_contents() can be + called inside a GtkClipboardReceivedFunc(). (#163844) + 2005-02-02 Matthias Clasen * NEWS: Updates diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 86485ec470..2af69a79da 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2005-02-02 Ivan, Wong Yat Cheung + + * gdk/win32/gdkselection.c: Use a FIFO list for storing GdkSelProp + of a single window so that gtk_clipboard_request_contents() can be + called inside a GtkClipboardReceivedFunc(). (#163844) + 2005-02-02 Matthias Clasen * NEWS: Updates diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 86485ec470..2af69a79da 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +2005-02-02 Ivan, Wong Yat Cheung + + * gdk/win32/gdkselection.c: Use a FIFO list for storing GdkSelProp + of a single window so that gtk_clipboard_request_contents() can be + called inside a GtkClipboardReceivedFunc(). (#163844) + 2005-02-02 Matthias Clasen * NEWS: Updates diff --git a/gdk/win32/gdkselection-win32.c b/gdk/win32/gdkselection-win32.c index aaf728376e..3b23bcdbf3 100644 --- a/gdk/win32/gdkselection-win32.c +++ b/gdk/win32/gdkselection-win32.c @@ -136,13 +136,8 @@ _gdk_selection_property_store (GdkWindow *owner, gint length) { GdkSelProp *prop; + GSList *prop_list; - prop = g_hash_table_lookup (sel_prop_table, GDK_WINDOW_HWND (owner)); - if (prop != NULL) - { - g_free (prop->data); - g_hash_table_remove (sel_prop_table, GDK_WINDOW_HWND (owner)); - } prop = g_new (GdkSelProp, 1); if (type == GDK_TARGET_STRING) @@ -167,7 +162,9 @@ _gdk_selection_property_store (GdkWindow *owner, } prop->format = format; prop->type = type; - g_hash_table_insert (sel_prop_table, GDK_WINDOW_HWND (owner), prop); + prop_list = g_hash_table_lookup (sel_prop_table, GDK_WINDOW_HWND (owner)); + prop_list = g_slist_append (prop_list, prop); + g_hash_table_insert (sel_prop_table, GDK_WINDOW_HWND (owner), prop_list); } void @@ -656,6 +653,7 @@ gdk_selection_property_get (GdkWindow *requestor, gint *ret_format) { GdkSelProp *prop; + GSList *prop_list; g_return_val_if_fail (requestor != NULL, 0); g_return_val_if_fail (GDK_IS_WINDOW (requestor), 0); @@ -666,7 +664,8 @@ gdk_selection_property_get (GdkWindow *requestor, GDK_NOTE (DND, g_print ("gdk_selection_property_get: %p\n", GDK_WINDOW_HWND (requestor))); - prop = g_hash_table_lookup (sel_prop_table, GDK_WINDOW_HWND (requestor)); + prop_list = g_hash_table_lookup (sel_prop_table, GDK_WINDOW_HWND (requestor)); + prop = prop_list ? (GdkSelProp *) prop_list->data : NULL; if (prop == NULL) { @@ -691,15 +690,18 @@ void _gdk_selection_property_delete (GdkWindow *window) { GdkSelProp *prop; + GSList *prop_list; GDK_NOTE (DND, g_print ("_gdk_selection_property_delete: %p\n", GDK_WINDOW_HWND (window))); - prop = g_hash_table_lookup (sel_prop_table, GDK_WINDOW_HWND (window)); - if (prop != NULL) + prop_list = g_hash_table_lookup (sel_prop_table, GDK_WINDOW_HWND (window)); + if (prop_list && (prop = (GdkSelProp *) prop_list->data) != NULL) { g_free (prop->data); - g_hash_table_remove (sel_prop_table, GDK_WINDOW_HWND (window)); + prop_list = g_slist_remove (prop_list, prop); + g_free (prop); + g_hash_table_insert (sel_prop_table, GDK_WINDOW_HWND (window), prop_list); } }