[gnome-builder] documentation-card: be extra defensive in source callback
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] documentation-card: be extra defensive in source callback
- Date: Sat, 19 Aug 2017 23:52:38 +0000 (UTC)
commit f8c353430305cffba4e89bcf77c6014855833bbc
Author: Christian Hergert <chergert redhat com>
Date: Sat Aug 19 16:49:41 2017 -0700
documentation-card: be extra defensive in source callback
We want to ensure our editor_view isn't in the destruction path when our
callback is executed. So just try to be a bit extra defensive here.
.../gbp-documentation-card-view-addin.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
---
diff --git a/plugins/documentation-card/gbp-documentation-card-view-addin.c
b/plugins/documentation-card/gbp-documentation-card-view-addin.c
index 865855c..558b14e 100644
--- a/plugins/documentation-card/gbp-documentation-card-view-addin.c
+++ b/plugins/documentation-card/gbp-documentation-card-view-addin.c
@@ -88,9 +88,17 @@ search_document_cb (gpointer data)
self->timeout_id = 0;
- window = gtk_widget_get_parent_window (GTK_WIDGET (self->editor_view));
- display = gdk_window_get_display (window);
- device = gdk_seat_get_pointer (gdk_display_get_default_seat (display));
+ /* Be defensive against widget destruction */
+ if (self->editor_view == NULL ||
+ NULL == (window = gtk_widget_get_parent_window (GTK_WIDGET (self->editor_view))) ||
+ NULL == (display = gdk_window_get_display (window)) ||
+ NULL == (device = gdk_seat_get_pointer (gdk_display_get_default_seat (display))))
+ {
+ if (self->poped_up)
+ self->poped_up = FALSE;
+ gbp_documentation_card_popdown (self->popover);
+ return G_SOURCE_REMOVE;
+ }
gdk_window_get_device_position (window, device, &x, &y, NULL);
@@ -219,7 +227,7 @@ gbp_documentation_card_view_addin_unload (IdeEditorViewAddin *addin,
ide_clear_source (&self->timeout_id);
ide_clear_signal_handler (self->editor_view, &self->motion_handler_id);
- g_free (self->previous_text);
+ g_clear_pointer (&self->previous_text, g_free);
gtk_widget_destroy (GTK_WIDGET (self->popover));
self->popover = NULL;
self->editor_view = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]