Give subprocess creation a way to find a valid current directory
[bpt/emacs.git] / src / xterm.h
index bdce1c5..8098216 100644 (file)
@@ -40,6 +40,33 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define MAXHEIGHT 80
 
 #ifdef HAVE_X11
+
+/* HAVE_X11R4 is defined if we have the features of X11R4.  It should
+   be defined when we're using X11R5, since X11R5 has the features of
+   X11R4.  If, in the future, we find we need more of these flags
+   (HAVE_X11R5, for example), code should always be written to test
+   the most recent flag first:
+
+      #ifdef HAVE_X11R5
+        ...
+      #elif HAVE_X11R4
+        ...
+      #elif HAVE_X11
+        ...
+      #endif
+
+   If you ever find yourself writing a "#ifdef HAVE_FOO" clause that
+   looks a lot like another one, consider moving the text into a macro
+   whose definition is configuration-dependent, but whose usage is
+   universal - like the stuff in systime.h.
+
+   It turns out that we can auto-detect whether we're being compiled
+   with X11R3 or X11R4 by looking for the flag macros for R4 structure
+   members that R3 doesn't have.  */
+#ifdef PBaseSize
+#define HAVE_X11R4
+#endif
+
 #define PIX_TYPE unsigned long
 #define XDISPLAY x_current_display,
 #define XFlushQueue() XFlush(x_current_display)
@@ -50,7 +77,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define DISPLAY_SCREEN_ARG x_current_display, \
                                      XDefaultScreen (x_current_display)
 #define DISPLAY_CELLS DisplayCells (x_current_display, XDefaultScreen (x_current_display))
-#define ROOT_WINDOW RootWindow (x_current_display, XDefaultScreen (x_current_display))
+#define ROOT_WINDOW RootWindow (x_current_display, DefaultScreen (x_current_display))
 #define FONT_TYPE XFontStruct
 #define Color XColor
 
@@ -75,9 +102,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define FONT_HEIGHT(f) ((f)->ascent + (f)->descent)
 #define FONT_BASE(f)    ((f)->ascent)
 
-/* GC values used for drawing non-standard (other face) text. */
-extern XGCValues face_gc_values;                                     
-
 /* The mask of events that text windows always want to receive.  This
    does not include mouse movement events.  It is used when the window
    is created (in x_window) and when we ask/unask for mouse movement
@@ -177,34 +201,34 @@ struct frame *x_focus_frame;
 /* Variables associated with the X display screen this emacs is using. */
 
 /* How many screens this X display has. */
-extern Lisp_Object x_screen_count;
+extern int x_screen_count;
 
 /* The vendor supporting this X server. */
 extern Lisp_Object Vx_vendor;
 
 /* The vendor's release number for this X server. */
-extern Lisp_Object x_release;
+extern int x_release;
 
 /* Height of this X screen in pixels. */
-extern Lisp_Object x_screen_height;
+extern int x_screen_height;
 
 /* Height of this X screen in millimeters. */
-extern Lisp_Object x_screen_height_mm;
+extern int x_screen_height_mm;
 
 /* Width of this X screen in pixels. */
-extern Lisp_Object x_screen_width;
+extern int x_screen_width;
 
 /* Width of this X screen in millimeters. */
-extern Lisp_Object x_screen_width_mm;
+extern int x_screen_width_mm;
 
 /* Does this X screen do backing store? */
 extern Lisp_Object Vx_backing_store;
 
 /* Does this X screen do save-unders? */
-extern Lisp_Object x_save_under;
+extern int x_save_under;
 
 /* Number of planes for this screen. */
-extern Lisp_Object x_screen_planes;
+extern int x_screen_planes;
 
 /* X Visual type of this screen. */
 extern Lisp_Object Vx_screen_visual;
@@ -311,7 +335,24 @@ struct x_display
   /* What kind of text cursor is drawn in this window right now?  (If
      there is no cursor (phys_cursor_x < 0), then this means nothing.  */
   enum text_cursor_kinds text_cursor_kind;
+
+  /* These are the current window manager hints.  It seems that
+     XSetWMHints, when presented with an unset bit in the `flags'
+     member of the hints structure, does not leave the corresponding
+     attribute unchanged; rather, it resets that attribute to its
+     default value.  For example, unless you set the `icon_pixmap'
+     field and the `IconPixmapHint' bit, XSetWMHints will forget what
+     your icon pixmap was.  This is rather troublesome, since some of
+     the members (for example, `input' and `icon_pixmap') want to stay
+     the same throughout the execution of Emacs.  So, we keep this
+     structure around, just leaving values in it and adding new bits
+     to the mask as we go.  */
+  XWMHints wm_hints;
 };
+
+/* Return the window associated with the frame F.  */
+#define FRAME_X_WINDOW(f) ((f)->display.x->window_desc)
+
 \f
 /* When X windows are used, a glyf may be a 16 bit unsigned datum.
    The high order byte is the face number and is used as an index
@@ -324,20 +365,8 @@ struct x_display
    fixed width, and to have the same height and width. */
 
 #ifdef HAVE_X11
-/* Table of GC's used for this frame. */
-GC *gc_table;
-
-/* How many GCs are in the table. */
-int gcs_in_use;
 
-struct face
-{
-  GC face_gc;
-  unsigned int foreground;
-  unsigned int background;
-  Pixmap stipple;
-  XFontStruct *font;
-};
+/* Face declared in dispextern.h */
 
 #else  /* X10 */