]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/xwidget.c (kill_buffer_xwidgets): Cleanup OSR GtkWidget when xwidget
authorGrégoire Jadi <gregoire.jadi@gmail.com>
Tue, 16 Jul 2013 17:39:19 +0000 (19:39 +0200)
committerGrégoire Jadi <gregoire.jadi@gmail.com>
Tue, 16 Jul 2013 17:39:19 +0000 (19:39 +0200)
are freed.

src/xwidget.c

index fcebc85bba1e884c3f47bd473c68ec3d2b5f1084..7834e5b0beafc8e1ca175cc27c182b781c30b631 100644 (file)
@@ -1883,12 +1883,21 @@ xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix)
 void
 kill_buffer_xwidgets (Lisp_Object buffer)
 {
-  Lisp_Object tail, xw;
+  Lisp_Object tail, xwidget;
   for (tail = Fget_buffer_xwidgets (buffer); CONSP (tail); tail = XCDR (tail))
     {
-      xw = XCAR (tail);
-      Vxwidget_list = Fdelq (xw, Vxwidget_list);
+      xwidget = XCAR (tail);
+      Vxwidget_list = Fdelq (xwidget, Vxwidget_list);
       /* TODO free the GTK things in xw */
+      {
+        CHECK_XWIDGET (xwidget);
+        struct xwidget *xw = XXWIDGET (xwidget);
+        if (xw->widget_osr && xw->widgetwindow_osr)
+          {
+            gtk_widget_destroy(GTK_WIDGET (xw->widget_osr));
+            gtk_widget_destroy(GTK_WIDGET (xw->widgetwindow_osr));
+          }
+      }
     }
 }