[gnome-builder] documentation-card: be extra defensive in source callback



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]