]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_free_gcs): New function.
authorGerd Moellmann <gerd@gnu.org>
Thu, 7 Dec 2000 11:45:33 +0000 (11:45 +0000)
committerGerd Moellmann <gerd@gnu.org>
Thu, 7 Dec 2000 11:45:33 +0000 (11:45 +0000)
src/ChangeLog
src/xfns.c

index bd0872329973c3bbeca7c7db040fd30c9ffce4e7..340222b56fbb0a60dec1de6ce77a58522d150f7b 100644 (file)
@@ -1,3 +1,15 @@
+2000-12-07  Gerd Moellmann  <gerd@gnu.org>
+
+       * xfns.c (x_free_gcs): New function.
+
+       * xterm.h (x_free_gcs): Add prototype.
+
+       * widget.c (EmacsFrameDestroy): Call x_free_gcs instead of
+       freeing GCs here.
+
+       * xterm.c (x_destroy_window): Call x_free_gcs so that
+       resources of non-toolkit X windows will be freed.
+
 2000-12-07  Andrew Innes  <andrewi@gnu.org>
 
        * w32fns.c (xlfd_charset_of_font): Fix last change.
index 65e917cf4c5b57c4ff9e45512a7e5f55376272d4..5cb5f2901f2001d3ade62362689a72672854bf98 100644 (file)
@@ -3936,20 +3936,20 @@ x_make_gc (f)
   gc_values.foreground = f->output_data.x->foreground_pixel;
   gc_values.background = f->output_data.x->background_pixel;
   gc_values.line_width = 0;    /* Means 1 using fast algorithm.  */
-  f->output_data.x->normal_gc = XCreateGC (FRAME_X_DISPLAY (f),
-                                      FRAME_X_WINDOW (f),
-                                      GCLineWidth | GCFont
-                                      | GCForeground | GCBackground,
-                                      &gc_values);
+  f->output_data.x->normal_gc
+    = XCreateGC (FRAME_X_DISPLAY (f),
+                FRAME_X_WINDOW (f),
+                GCLineWidth | GCFont | GCForeground | GCBackground,
+                &gc_values);
 
   /* Reverse video style.  */
   gc_values.foreground = f->output_data.x->background_pixel;
   gc_values.background = f->output_data.x->foreground_pixel;
-  f->output_data.x->reverse_gc = XCreateGC (FRAME_X_DISPLAY (f),
-                                       FRAME_X_WINDOW (f),
-                                       GCFont | GCForeground | GCBackground
-                                       | GCLineWidth,
-                                       &gc_values);
+  f->output_data.x->reverse_gc
+    = XCreateGC (FRAME_X_DISPLAY (f),
+                FRAME_X_WINDOW (f),
+                GCFont | GCForeground | GCBackground | GCLineWidth,
+                &gc_values);
 
   /* Cursor has cursor-color background, background-color foreground.  */
   gc_values.foreground = f->output_data.x->background_pixel;
@@ -3984,6 +3984,45 @@ x_make_gc (f)
   UNBLOCK_INPUT;
 }
 
+
+/* Free what was was allocated in x_make_gc.  */
+
+void
+x_free_gcs (f)
+     struct frame *f;
+{
+  Display *dpy = FRAME_X_DISPLAY (f);
+
+  BLOCK_INPUT;
+  
+  if (f->output_data.x->normal_gc)
+    {
+      XFreeGC (dpy, f->output_data.x->normal_gc);
+      f->output_data.x->normal_gc = 0;
+    }
+
+  if (f->output_data.x->reverse_gc)
+    {
+      XFreeGC (dpy, f->output_data.x->reverse_gc);
+      f->output_data.x->reverse_gc = 0;
+    }
+  
+  if (f->output_data.x->cursor_gc)
+    {
+      XFreeGC (dpy, f->output_data.x->cursor_gc);
+      f->output_data.x->cursor_gc = 0;
+    }
+
+  if (f->output_data.x->border_tile)
+    {
+      XFreePixmap (dpy, f->output_data.x->border_tile);
+      f->output_data.x->border_tile = 0;
+    }
+
+  UNBLOCK_INPUT;
+}
+
+
 DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
        1, 1, 0,
   "Make a new X window, which is called a \"frame\" in Emacs terms.\n\