@@ -2664,6 +2664,8 @@ ctk_drag_drop (CtkDragSourceInfo *info,
2664
2664
{
2665
2665
if (info -> icon_window )
2666
2666
ctk_widget_hide (info -> icon_window );
2667
+ if (info -> proxy_dest )
2668
+ g_object_ref (info -> proxy_dest -> context );
2667
2669
2668
2670
cdk_drag_drop (info -> context , time );
2669
2671
info -> drop_timeout = cdk_threads_add_timeout (DROP_ABORT_TIME ,
@@ -2757,7 +2759,7 @@ static void
2757
2759
ctk_drag_source_info_free (CtkDragSourceInfo * info )
2758
2760
{
2759
2761
ctk_drag_remove_icon (info );
2760
- ctk_widget_destroy ( info -> icon_window );
2762
+ g_clear_pointer ( & info -> icon_window , ctk_widget_destroy );
2761
2763
g_free (info );
2762
2764
}
2763
2765
@@ -2812,7 +2814,11 @@ ctk_drag_source_info_destroy (CtkDragSourceInfo *info)
2812
2814
ctk_target_list_unref (info -> target_list );
2813
2815
2814
2816
if (info -> drop_timeout )
2815
- g_source_remove (info -> drop_timeout );
2817
+ {
2818
+ g_source_remove (info -> drop_timeout );
2819
+ if (info -> proxy_dest )
2820
+ g_object_unref (info -> proxy_dest -> context );
2821
+ }
2816
2822
2817
2823
if (info -> update_idle )
2818
2824
g_source_remove (info -> update_idle );
@@ -3258,14 +3264,20 @@ static gboolean
3258
3264
ctk_drag_abort_timeout (gpointer data )
3259
3265
{
3260
3266
CtkDragSourceInfo * info = data ;
3267
+ CdkDragContext * context = NULL ;
3261
3268
guint32 time = CDK_CURRENT_TIME ;
3262
3269
3263
3270
if (info -> proxy_dest )
3264
- time = info -> proxy_dest -> proxy_drop_time ;
3271
+ {
3272
+ time = info -> proxy_dest -> proxy_drop_time ;
3273
+ context = info -> proxy_dest -> context ;
3274
+ }
3265
3275
3266
3276
info -> drop_timeout = 0 ;
3267
3277
ctk_drag_drop_finished (info , CTK_DRAG_RESULT_TIMEOUT_EXPIRED , time );
3268
-
3278
+
3279
+ g_clear_object (& context );
3280
+
3269
3281
return FALSE;
3270
3282
}
3271
3283
0 commit comments