]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
authorEli Zaretskii <eliz@gnu.org>
Thu, 6 Dec 2001 11:56:53 +0000 (11:56 +0000)
committerEli Zaretskii <eliz@gnu.org>
Thu, 6 Dec 2001 11:56:53 +0000 (11:56 +0000)
scroll bars of the frame before deleting the frame itself.  If the
frame has a widget, delete the frame with XtDestroyWidget, and do
not call XDestroyWindow before that.

src/ChangeLog
src/xterm.c

index e9efc65e9b751a546e0f75448104d2589bec2a7b..bc80158cf814ac0097b84f12a6cd0ed78e443d6e 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-06  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * xterm.c (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
+       scroll bars of the frame before deleting the frame itself.  If the
+       frame has a widget, delete the frame with XtDestroyWidget, and do
+       not call XDestroyWindow before that.
+
 2001-12-06  Kim F. Storm  <storm@cua.dk>
 
        * xfns.c (x_report_frame_params): Return actual fringe widths.
index db255f0765989bcdfa985d8497a22f9f42a95c36..51b94c9fb37f3e31f5b594b0e0f605d7ab3cb21e 100644 (file)
@@ -13219,6 +13219,8 @@ x_free_frame_resources (f)
      struct frame *f;
 {
   struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
+  Lisp_Object bar;
+  struct scroll_bar *b;
 
   BLOCK_INPUT;
 
@@ -13228,23 +13230,40 @@ x_free_frame_resources (f)
     {
       if (f->output_data.x->icon_desc)
        XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc);
-      
+
+#ifdef USE_X_TOOLKIT
+      /* Explicitly destroy the scroll bars of the frame.  Without
+        this, we get "BadDrawable" errors from the toolkit later on,
+        presumably from expose events generated for the disappearing
+        toolkit scroll bars.  */
+      for (bar = FRAME_SCROLL_BARS (f); !NILP (bar); bar = b->next)
+       {
+         b = XSCROLL_BAR (bar);
+         x_scroll_bar_remove (b);
+       }
+#endif
+
 #ifdef HAVE_X_I18N
       if (FRAME_XIC (f))
        free_frame_xic (f);
 #endif
-      
-      if (FRAME_X_WINDOW (f))
-       XDestroyWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
-      
+
 #ifdef USE_X_TOOLKIT
       if (f->output_data.x->widget)
        {
          XtDestroyWidget (f->output_data.x->widget);
          f->output_data.x->widget = NULL;
        }
+      /* Tooltips don't have widgets, only a simple X window, even if
+        we are using a toolkit.  */
+      else if (FRAME_X_WINDOW (f))
+       XDestroyWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
+
       free_frame_menubar (f);
-#endif /* USE_X_TOOLKIT */
+#else  /* !USE_X_TOOLKIT */
+      if (FRAME_X_WINDOW (f))
+       XDestroyWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
+#endif /* !USE_X_TOOLKIT */
 
       unload_color (f, f->output_data.x->foreground_pixel);
       unload_color (f, f->output_data.x->background_pixel);
@@ -13252,7 +13271,7 @@ x_free_frame_resources (f)
       unload_color (f, f->output_data.x->cursor_foreground_pixel);
       unload_color (f, f->output_data.x->border_pixel);
       unload_color (f, f->output_data.x->mouse_pixel);
-      
+
       if (f->output_data.x->scroll_bar_background_pixel != -1)
        unload_color (f, f->output_data.x->scroll_bar_background_pixel);
       if (f->output_data.x->scroll_bar_foreground_pixel != -1)