From 81c42faa5aa723a27209484dcfb1e14c6452e37a Mon Sep 17 00:00:00 2001 From: John Ralls Date: Wed, 18 Dec 2019 21:00:29 -0800 Subject: [PATCH 1/4] Handle NSException from removeItemAtIndex. --- gtk/gtkapplication-quartz-menu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gtk/gtkapplication-quartz-menu.c b/gtk/gtkapplication-quartz-menu.c index 0e2567fca7..0ed90f3207 100644 --- a/gtk/gtkapplication-quartz-menu.c +++ b/gtk/gtkapplication-quartz-menu.c @@ -393,8 +393,15 @@ menu_item_removed (gint position, gpointer user_data) { GNSMenu *menu = user_data; - - [menu removeItemAtIndex:position]; + @try + { + [menu removeItemAtIndex:position]; + } + @catch(NSException *err) + { + g_critical("GNSMenu removeItemAtIndex: %d raised exception %s", position, + [[err reason] UTF8String]); + } } @implementation GNSMenu From 44c033ccb835e81327374173ae3c723b68c0c9a6 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Wed, 18 Dec 2019 21:03:28 -0800 Subject: [PATCH 2/4] Ensure that GtkDragDestSite is inited to 0. --- gtk/gtkdnd-quartz.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c index a026584119..b62b0625d1 100644 --- a/gtk/gtkdnd-quartz.c +++ b/gtk/gtkdnd-quartz.c @@ -444,7 +444,7 @@ gtk_drag_dest_set (GtkWidget *widget, old_site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"); - site = g_new (GtkDragDestSite, 1); + site = g_new0 (GtkDragDestSite, 1); site->flags = flags; site->have_drag = FALSE; if (targets) From c3deff17a6e9ef2e6e0415d1ecb6931af6d06fbd Mon Sep 17 00:00:00 2001 From: John Ralls Date: Wed, 18 Dec 2019 21:04:07 -0800 Subject: [PATCH 3/4] Check target list not null to prevent segfault. --- gtk/gtkdnd-quartz.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c index b62b0625d1..789cdf3a08 100644 --- a/gtk/gtkdnd-quartz.c +++ b/gtk/gtkdnd-quartz.c @@ -1202,7 +1202,8 @@ gtk_drag_begin_internal (GtkWidget *widget, window = [(id)[nswindow contentView] gdkWindow]; g_return_val_if_fail (nsevent != NULL, NULL); - + g_return_val_if_fail (target_list != NULL, NULL); + context = gdk_drag_begin (window, g_list_copy (target_list->list)); g_return_val_if_fail (context != NULL, NULL); From eabaf900764d9e4eda16247e49a3c4f58de0776e Mon Sep 17 00:00:00 2001 From: John Ralls Date: Wed, 18 Dec 2019 21:05:24 -0800 Subject: [PATCH 4/4] Match returns annotation on quartz version of gtk_drag_dest_get_target_List. --- gtk/gtkdnd-quartz.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c index 789cdf3a08..9356a69b8a 100644 --- a/gtk/gtkdnd-quartz.c +++ b/gtk/gtkdnd-quartz.c @@ -519,6 +519,7 @@ gtk_drag_dest_unset (GtkWidget *widget) /** * gtk_drag_dest_get_target_list: (method) * @widget: a #GtkWidget + * Returns: (nullable) (transfer none): the #GtkTargetList, or %NULL if none */ GtkTargetList* gtk_drag_dest_get_target_list (GtkWidget *widget)