diff options
Diffstat (limited to 'src/xfns.c')
| -rw-r--r-- | src/xfns.c | 358 | 
1 files changed, 81 insertions, 277 deletions
diff --git a/src/xfns.c b/src/xfns.c index b08fc76524c..2b895642942 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -42,8 +42,6 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */  #include "termchar.h"  #include "font.h" -#ifdef HAVE_X_WINDOWS -  #include <sys/types.h>  #include <sys/stat.h> @@ -153,7 +151,7 @@ check_x_display_info (Lisp_Object object)        struct frame *sf = XFRAME (selected_frame);        if (FRAME_X_P (sf) && FRAME_LIVE_P (sf)) -	dpyinfo = FRAME_X_DISPLAY_INFO (sf); +	dpyinfo = FRAME_DISPLAY_INFO (sf);        else if (x_display_list != 0)  	dpyinfo = x_display_list;        else @@ -173,193 +171,12 @@ check_x_display_info (Lisp_Object object)    else      {        struct frame *f = decode_window_system_frame (object); -      dpyinfo = FRAME_X_DISPLAY_INFO (f); +      dpyinfo = FRAME_DISPLAY_INFO (f);      }    return dpyinfo;  } - -/* Return the Emacs frame-object corresponding to an X window. -   It could be the frame's main window or an icon window.  */ - -/* This function can be called during GC, so use GC_xxx type test macros.  */ - -struct frame * -x_window_to_frame (struct x_display_info *dpyinfo, int wdesc) -{ -  Lisp_Object tail, frame; -  struct frame *f; - -  if (wdesc == None) -    return NULL; - -  FOR_EACH_FRAME (tail, frame) -    { -      f = XFRAME (frame); -      if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) -	continue; -      if (f->output_data.x->hourglass_window == wdesc) -	return f; -#ifdef USE_X_TOOLKIT -      if ((f->output_data.x->edit_widget -	   && XtWindow (f->output_data.x->edit_widget) == wdesc) -	  /* A tooltip frame?  */ -	  || (!f->output_data.x->edit_widget -	      && FRAME_X_WINDOW (f) == wdesc) -          || f->output_data.x->icon_desc == wdesc) -        return f; -#else /* not USE_X_TOOLKIT */ -#ifdef USE_GTK -      if (f->output_data.x->edit_widget) -      { -        GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); -        struct x_output *x = f->output_data.x; -        if (gwdesc != 0 && gwdesc == x->edit_widget) -          return f; -      } -#endif /* USE_GTK */ -      if (FRAME_X_WINDOW (f) == wdesc -          || f->output_data.x->icon_desc == wdesc) -        return f; -#endif /* not USE_X_TOOLKIT */ -    } -  return 0; -} - -#if defined (USE_X_TOOLKIT) || defined (USE_GTK) -/* Like x_window_to_frame but also compares the window with the widget's -   windows.  */ - -struct frame * -x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc) -{ -  Lisp_Object tail, frame; -  struct frame *f, *found = NULL; -  struct x_output *x; - -  if (wdesc == None) -    return NULL; - -  FOR_EACH_FRAME (tail, frame) -    { -      if (found) -        break; -      f = XFRAME (frame); -      if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo) -	{ -	  /* This frame matches if the window is any of its widgets.  */ -	  x = f->output_data.x; -	  if (x->hourglass_window == wdesc) -	    found = f; -	  else if (x->widget) -	    { -#ifdef USE_GTK -              GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); -              if (gwdesc != 0 -                  && gtk_widget_get_toplevel (gwdesc) == x->widget) -                found = f; -#else -	      if (wdesc == XtWindow (x->widget) -		  || wdesc == XtWindow (x->column_widget) -		  || wdesc == XtWindow (x->edit_widget)) -		found = f; -	      /* Match if the window is this frame's menubar.  */ -	      else if (lw_window_is_in_menubar (wdesc, x->menubar_widget)) -		found = f; -#endif -	    } -	  else if (FRAME_X_WINDOW (f) == wdesc) -	    /* A tooltip frame.  */ -	    found = f; -	} -    } - -  return found; -} - -/* Likewise, but consider only the menu bar widget.  */ - -struct frame * -x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event) -{ -  Window wdesc = event->xany.window; -  Lisp_Object tail, frame; -  struct frame *f; -  struct x_output *x; - -  if (wdesc == None) -    return NULL; - -  FOR_EACH_FRAME (tail, frame) -    { -      f = XFRAME (frame); -      if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) -	continue; -      x = f->output_data.x; -#ifdef USE_GTK -      if (x->menubar_widget && xg_event_is_for_menubar (f, event)) -        return f; -#else -      /* Match if the window is this frame's menubar.  */ -      if (x->menubar_widget -	  && lw_window_is_in_menubar (wdesc, x->menubar_widget)) -	return f; -#endif -    } -  return 0; -} - -/* Return the frame whose principal (outermost) window is WDESC. -   If WDESC is some other (smaller) window, we return 0.  */ - -struct frame * -x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc) -{ -  Lisp_Object tail, frame; -  struct frame *f; -  struct x_output *x; - -  if (wdesc == None) -    return NULL; - -  FOR_EACH_FRAME (tail, frame) -    { -      f = XFRAME (frame); -      if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) -	continue; -      x = f->output_data.x; - -      if (x->widget) -	{ -	  /* This frame matches if the window is its topmost widget.  */ -#ifdef USE_GTK -          GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); -          if (gwdesc == x->widget) -            return f; -#else -	  if (wdesc == XtWindow (x->widget)) -	    return f; -#if 0 /* I don't know why it did this, -	 but it seems logically wrong, -	 and it causes trouble for MapNotify events.  */ -	  /* Match if the window is this frame's menubar.  */ -	  if (x->menubar_widget -	      && wdesc == XtWindow (x->menubar_widget)) -	    return f; -#endif -#endif -	} -      else if (FRAME_X_WINDOW (f) == wdesc) -	/* Tooltip frame.  */ -	return f; -    } -  return 0; -} -#endif /* USE_X_TOOLKIT || USE_GTK */ - - -  /* Store the screen positions of frame F into XPTR and YPTR.     These are the positions of the containing window manager window,     not Emacs's own window.  */ @@ -374,7 +191,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr)    Atom actual_type;    unsigned long actual_size, bytes_remaining;    int rc, actual_format; -  struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); +  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);    long max_len = 400;    Display *dpy = FRAME_X_DISPLAY (f);    unsigned char *tmp_data = NULL; @@ -437,7 +254,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr)        XTranslateCoordinates (FRAME_X_DISPLAY (f),  			     /* From-window, to-window.  */ -			     FRAME_X_DISPLAY_INFO (f)->root_window, +			     FRAME_DISPLAY_INFO (f)->root_window,                               FRAME_X_WINDOW (f),  			     /* From-position, to-position.  */ @@ -456,7 +273,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr)            XTranslateCoordinates (FRAME_X_DISPLAY (f),                                   /* From-window, to-window.  */ -                                 FRAME_X_DISPLAY_INFO (f)->root_window, +                                 FRAME_DISPLAY_INFO (f)->root_window,                                   FRAME_OUTER_WINDOW (f),                                   /* From-position, to-position.  */ @@ -577,7 +394,7 @@ x_decode_color (struct frame *f, Lisp_Object color_name, int mono_color)  #endif    /* Return MONO_COLOR for monochrome frames.  */ -  if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1) +  if (FRAME_DISPLAY_INFO (f)->n_planes == 1)      return mono_color;    /* x_defined_color is responsible for coping with failures @@ -770,7 +587,7 @@ make_invisible_cursor (struct frame *f)    Cursor c = 0;    x_catch_errors (dpy); -  pix = XCreateBitmapFromData (dpy, FRAME_X_DISPLAY_INFO (f)->root_window, +  pix = XCreateBitmapFromData (dpy, FRAME_DISPLAY_INFO (f)->root_window,                                 no_data, 1, 1);    if (! x_had_errors_p (dpy) && pix != None)      { @@ -895,8 +712,8 @@ x_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)      XDefineCursor (dpy, FRAME_X_WINDOW (f),                     f->output_data.x->current_cursor = cursor); -  if (FRAME_X_DISPLAY_INFO (f)->invisible_cursor == 0) -    FRAME_X_DISPLAY_INFO (f)->invisible_cursor = make_invisible_cursor (f); +  if (FRAME_DISPLAY_INFO (f)->invisible_cursor == 0) +    FRAME_DISPLAY_INFO (f)->invisible_cursor = make_invisible_cursor (f);    if (cursor != x->text_cursor        && x->text_cursor != 0) @@ -1031,7 +848,7 @@ x_set_border_pixel (struct frame *f, int pix)     Note: this is done in two routines because of the way X10 works.     Note: under X11, this is normally the province of the window manager, -   and so emacs' border colors may be overridden.  */ +   and so emacs's border colors may be overridden.  */  static void  x_set_border_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) @@ -1201,7 +1018,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)  	clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix);      }  #endif /* not USE_X_TOOLKIT && not USE_GTK */ -  adjust_glyphs (f); +  adjust_frame_glyphs (f);    run_window_configuration_change_hook (f);  } @@ -1215,8 +1032,11 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)  void  x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)  { -  int delta, nlines, root_height; +  int nlines; +#if ! defined (USE_GTK) +  int delta, root_height;    Lisp_Object root_window; +#endif    /* Treat tool bars like menu bars.  */    if (FRAME_MINIBUF_ONLY_P (f)) @@ -1229,6 +1049,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)      nlines = 0;  #ifdef USE_GTK +    FRAME_TOOL_BAR_LINES (f) = 0;    if (nlines)      { @@ -1245,8 +1066,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)        FRAME_EXTERNAL_TOOL_BAR (f) = 0;      } -  return; -#endif +#else /* !USE_GTK */       /* Make sure we redisplay all windows in this frame.  */    ++windows_or_buffers_changed; @@ -1264,7 +1084,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)    FRAME_TOOL_BAR_LINES (f) = nlines;    resize_frame_windows (f, FRAME_LINES (f), 0); -  adjust_glyphs (f); +  adjust_frame_glyphs (f);    /* We also have to make sure that the internal border at the top of       the frame, below the menu bar or tool bar, is redrawn when the @@ -1301,7 +1121,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)      }      run_window_configuration_change_hook (f); - +#endif /* USE_GTK */  } @@ -1486,7 +1306,7 @@ x_set_name_internal (struct frame *f, Lisp_Object name)  	text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp,  				    &do_free_text_value);  	text.encoding = (stringp ? XA_STRING -			 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); +			 : FRAME_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);  	text.format = 8;  	text.nitems = bytes;  	if (text.nitems != bytes) @@ -1503,7 +1323,7 @@ x_set_name_internal (struct frame *f, Lisp_Object name)  	    icon.value = x_encode_text (f->icon_name, coding_system, 0,  					&bytes, &stringp, &do_free_icon_value);  	    icon.encoding = (stringp ? XA_STRING -			     : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); +			     : FRAME_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);  	    icon.format = 8;  	    icon.nitems = bytes;  	    if (icon.nitems != bytes) @@ -1518,8 +1338,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name)  #else /* not USE_GTK */  	XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);  	XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), -			 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_name, -			 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING, +			 FRAME_DISPLAY_INFO (f)->Xatom_net_wm_name, +			 FRAME_DISPLAY_INFO (f)->Xatom_UTF8_STRING,  			 8, PropModeReplace,  			 SDATA (encoded_name),  			 SBYTES (encoded_name)); @@ -1527,8 +1347,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name)  	XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon);  	XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), -			 FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_icon_name, -			 FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING, +			 FRAME_DISPLAY_INFO (f)->Xatom_net_wm_icon_name, +			 FRAME_DISPLAY_INFO (f)->Xatom_UTF8_STRING,  			 8, PropModeReplace,  			 SDATA (encoded_icon_name),  			 SBYTES (encoded_icon_name)); @@ -1575,10 +1395,10 @@ x_set_name (struct frame *f, Lisp_Object name, int explicit)      {        /* Check for no change needed in this very common case  	 before we do any consing.  */ -      if (!strcmp (FRAME_X_DISPLAY_INFO (f)->x_id_name, +      if (!strcmp (FRAME_DISPLAY_INFO (f)->x_id_name,  		   SSDATA (f->name)))  	return; -      name = build_string (FRAME_X_DISPLAY_INFO (f)->x_id_name); +      name = build_string (FRAME_DISPLAY_INFO (f)->x_id_name);      }    else      CHECK_STRING (name); @@ -1648,9 +1468,8 @@ x_set_scroll_bar_default_width (struct frame *f)    int minw = 16;  #endif    /* A minimum width of 14 doesn't look good for toolkit scroll bars.  */ -  int width = minw + 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM; -  FRAME_CONFIG_SCROLL_BAR_COLS (f) = (width + wid - 1) / wid; -  FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = width; +  FRAME_CONFIG_SCROLL_BAR_COLS (f) = (minw + wid - 1) / wid; +  FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = minw;  #else    /* Make the actual width at least 14 pixels and a multiple of a       character width.  */ @@ -1674,7 +1493,7 @@ x_default_scroll_bar_color_parameter (struct frame *f,  				      const char *xprop, const char *xclass,  				      int foreground_p)  { -  struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); +  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);    Lisp_Object tem;    tem = x_get_arg (dpyinfo, alist, prop, xprop, xclass, RES_TYPE_STRING); @@ -1740,7 +1559,7 @@ hack_wm_protocols (struct frame *f, Widget widget)      unsigned long bytes_after;      if ((XGetWindowProperty (dpy, w, -			     FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, +			     FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols,  			     (long)0, (long)100, False, XA_ATOM,  			     &type, &format, &nitems, &bytes_after,  			     &catoms) @@ -1752,13 +1571,13 @@ hack_wm_protocols (struct frame *f, Widget widget)  	  {  	    nitems--;  	    if (atoms[nitems] -		== FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window) +		== FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window)  	      need_delete = 0;  	    else if (atoms[nitems] -		     == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus) +		     == FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus)  	      need_focus = 0;  	    else if (atoms[nitems] -		     == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself) +		     == FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself)  	      need_save = 0;  	  }        } @@ -1769,13 +1588,13 @@ hack_wm_protocols (struct frame *f, Widget widget)      Atom props [10];      int count = 0;      if (need_delete) -      props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; +      props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window;      if (need_focus) -      props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus; +      props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus;      if (need_save) -      props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; +      props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself;      if (count) -      XChangeProperty (dpy, w, FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, +      XChangeProperty (dpy, w, FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols,  		       XA_ATOM, 32, PropModeAppend,  		       (unsigned char *) props, count);    } @@ -1970,7 +1789,7 @@ xic_create_xfontset (struct frame *f)        struct frame *cf = XFRAME (frame);        if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf) -          && FRAME_X_DISPLAY_INFO (cf) == FRAME_X_DISPLAY_INFO (f) +          && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f)  	  && FRAME_FONT (f)  	  && FRAME_FONT (f)->pixel_size == pixel_size)          { @@ -2069,7 +1888,7 @@ xic_free_xfontset (struct frame *f)      {        struct frame *cf = XFRAME (frame);        if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf) -          && FRAME_X_DISPLAY_INFO (cf) == FRAME_X_DISPLAY_INFO (f) +          && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f)            && FRAME_XIC_FONTSET (cf) == FRAME_XIC_FONTSET (f))          {            shared_p = 1; @@ -2314,7 +2133,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)    XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++;    XtSetArg (al[ac], XtNborderWidth, f->border_width); ac++;    XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; -  XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; +  XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++;    XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;    shell_widget = XtAppCreateShell (f->namebuf, EMACS_CLASS,  				   applicationShellWidgetClass, @@ -2329,7 +2148,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)    ac = 0;    XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; -  XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; +  XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++;    XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;    XtSetArg (al[ac], XtNborderWidth, 0); ac++;    XtSetValues (pane_widget, al, ac); @@ -2345,7 +2164,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)    XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++;    XtSetArg (al[ac], XtNemacsFrame, f); ac++;    XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; -  XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; +  XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++;    XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;    XtSetArg (al[ac], XtNborderWidth, 0); ac++;    frame_widget = XtCreateWidget (f->namebuf, emacsFrameClass, pane_widget, @@ -2471,7 +2290,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)       be initialized to something relevant to the time we created the window.       */    XChangeProperty (XtDisplay (frame_widget), XtWindow (frame_widget), -		   FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, +		   FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols,  		   XA_ATOM, 32, PropModeAppend, NULL, 0);    /* Make all the standard events reach the Emacs frame.  */ @@ -2631,8 +2450,8 @@ x_window (struct frame *f)    /* Request "save yourself" and "delete window" commands from wm.  */    {      Atom protocols[2]; -    protocols[0] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; -    protocols[1] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; +    protocols[0] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window; +    protocols[1] = FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself;      XSetWMProtocols (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), protocols, 2);    } @@ -2692,7 +2511,7 @@ x_icon (struct frame *f, Lisp_Object parms)  {    Lisp_Object icon_x, icon_y;  #if 0 -  struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); +  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);  #endif    /* Set the position of the icon.  Note that twm groups all @@ -2776,7 +2595,7 @@ x_make_gc (struct frame *f)       this must be done on a per-frame basis.  */    f->output_data.x->border_tile      = (XCreatePixmapFromBitmapData -       (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, +       (FRAME_X_DISPLAY (f), FRAME_DISPLAY_INFO (f)->root_window,  	gray_bits, gray_width, gray_height,  	FRAME_FOREGROUND_PIXEL (f),  	FRAME_BACKGROUND_PIXEL (f), @@ -2842,7 +2661,7 @@ unwind_create_frame (Lisp_Object frame)    if (NILP (Fmemq (frame, Vframe_list)))      {  #if defined GLYPH_DEBUG && defined ENABLE_CHECKING -      struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); +      struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);  #endif        x_free_frame_resources (f); @@ -2874,7 +2693,7 @@ unwind_create_frame_1 (Lisp_Object val)  static void  x_default_font_parameter (struct frame *f, Lisp_Object parms)  { -  struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); +  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);    Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL,                                        RES_TYPE_STRING);    Lisp_Object font = Qnil; @@ -3068,9 +2887,9 @@ This function is an internal primitive--use `make-frame' instead.  */)    if (! STRINGP (f->icon_name))      fset_icon_name (f, Qnil); -  FRAME_X_DISPLAY_INFO (f) = dpyinfo; +  FRAME_DISPLAY_INFO (f) = dpyinfo; -  /* With FRAME_X_DISPLAY_INFO set up, this unwind-protect is safe.  */ +  /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe.  */    record_unwind_protect (do_unwind_create_frame, frame);    /* These colors will be set anyway later, but it's important @@ -3115,7 +2934,7 @@ This function is an internal primitive--use `make-frame' instead.  */)      }    else      { -      f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; +      f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;        f->output_data.x->explicit_parent = 0;      } @@ -3286,7 +3105,7 @@ This function is an internal primitive--use `make-frame' instead.  */)    /* Now consider the frame official.  */    f->terminal->reference_count++; -  FRAME_X_DISPLAY_INFO (f)->reference_count++; +  FRAME_DISPLAY_INFO (f)->reference_count++;    Vframe_list = Fcons (frame, Vframe_list);    /* We need to do this after creating the X window, so that the @@ -3411,7 +3230,7 @@ This function is an internal primitive--use `make-frame' instead.  */)  Lisp_Object  x_get_focus_frame (struct frame *frame)  { -  struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (frame); +  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);    Lisp_Object xfocus;    if (! dpyinfo->x_focus_frame)      return Qnil; @@ -3430,12 +3249,9 @@ x_get_focus_frame (struct frame *frame)     policy.  But I think it's okay to use when it's clearly done     following a user-command.  */ -DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, -       doc: /* Set the input focus to FRAME. -FRAME nil means use the selected frame.  */) -  (Lisp_Object frame) +void +x_focus_frame (struct frame *f)  { -  struct frame *f = decode_window_system_frame (frame);    Display *dpy = FRAME_X_DISPLAY (f);    block_input (); @@ -3457,8 +3273,6 @@ FRAME nil means use the selected frame.  */)    x_uncatch_errors ();    unblock_input (); - -  return Qnil;  } @@ -3939,7 +3753,7 @@ x_make_monitor_attribute_list (struct MonitorInfo *monitors,      {        struct frame *f = XFRAME (frame); -      if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo +      if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo  	  && !EQ (frame, tip_frame))  	{  	  int i = x_get_monitor_for_frame (f, monitors, n_monitors); @@ -4135,6 +3949,8 @@ x_get_monitor_attributes (struct x_display_info *dpyinfo)    Lisp_Object attributes_list = Qnil;    Display *dpy = dpyinfo->display; +  (void) dpy; /* Suppress unused variable warning.  */ +  #ifdef HAVE_XRANDR    int xrr_event_base, xrr_error_base;    bool xrr_ok = false; @@ -4219,7 +4035,7 @@ Internal use only, use `display-monitor-attributes-list' instead.  */)      {        struct frame *f = XFRAME (frame); -      if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo +      if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo  	  && !EQ (frame, tip_frame))  	{  	  GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_WIDGET (f)); @@ -4431,11 +4247,6 @@ x_display_info_for_name (Lisp_Object name)    CHECK_STRING (name); -#if 0 -  if (! EQ (Vinitial_window_system, intern ("x"))) -    error ("Not using X Windows"); /* That doesn't stop us anymore. */ -#endif -    for (dpyinfo = x_display_list, names = x_display_name_list;         dpyinfo;         dpyinfo = dpyinfo->next, names = XCDR (names)) @@ -4479,11 +4290,6 @@ terminate Emacs if we can't open the connection.    if (! NILP (xrm_string))      CHECK_STRING (xrm_string); -#if 0 -  if (! EQ (Vinitial_window_system, intern ("x"))) -    error ("Not using X Windows"); /* That doesn't stop us anymore. */ -#endif -    xrm_option = NILP (xrm_string) ? 0 : SSDATA (xrm_string);    validate_x_resource_name (); @@ -4730,7 +4536,7 @@ no value of TYPE (always string in the MS Windows case).  */)      {        CONS_TO_INTEGER (source, Window, target_window);        if (! target_window) -	target_window = FRAME_X_DISPLAY_INFO (f)->root_window; +	target_window = FRAME_DISPLAY_INFO (f)->root_window;      }    block_input (); @@ -5026,8 +4832,8 @@ x_create_tip_frame (struct x_display_info *dpyinfo,    f->output_data.x->scroll_bar_bottom_shadow_pixel = -1;  #endif /* USE_TOOLKIT_SCROLL_BARS */    fset_icon_name (f, Qnil); -  FRAME_X_DISPLAY_INFO (f) = dpyinfo; -  f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; +  FRAME_DISPLAY_INFO (f) = dpyinfo; +  f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;    f->output_data.x->explicit_parent = 0;    /* These colors will be set anyway later, but it's important @@ -5141,14 +4947,14 @@ x_create_tip_frame (struct x_display_info *dpyinfo,       happen.  */    init_frame_faces (f); -  f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; +  f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;    x_figure_window_size (f, parms, 0);    {      XSetWindowAttributes attrs;      unsigned long mask; -    Atom type = FRAME_X_DISPLAY_INFO (f)->Xatom_net_window_type_tooltip; +    Atom type = FRAME_DISPLAY_INFO (f)->Xatom_net_window_type_tooltip;      block_input ();      mask = CWBackPixel | CWOverrideRedirect | CWEventMask; @@ -5166,7 +4972,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,      tip_window        = FRAME_X_WINDOW (f)        = XCreateWindow (FRAME_X_DISPLAY (f), -		       FRAME_X_DISPLAY_INFO (f)->root_window, +		       FRAME_DISPLAY_INFO (f)->root_window,  		       /* x, y, width, height */  		       0, 0, 1, 1,  		       /* Border.  */ @@ -5174,7 +4980,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,  		       CopyFromParent, InputOutput, CopyFromParent,  		       mask, &attrs);      XChangeProperty (FRAME_X_DISPLAY (f), tip_window, -                     FRAME_X_DISPLAY_INFO (f)->Xatom_net_window_type, +                     FRAME_DISPLAY_INFO (f)->Xatom_net_window_type,                       XA_ATOM, 32, PropModeReplace,                       (unsigned char *)&type, 1);      unblock_input (); @@ -5209,10 +5015,10 @@ x_create_tip_frame (struct x_display_info *dpyinfo,    {      Lisp_Object disptype; -    if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1) +    if (FRAME_DISPLAY_INFO (f)->n_planes == 1)        disptype = intern ("mono"); -    else if (FRAME_X_DISPLAY_INFO (f)->visual->class == GrayScale -             || FRAME_X_DISPLAY_INFO (f)->visual->class == StaticGray) +    else if (FRAME_DISPLAY_INFO (f)->visual->class == GrayScale +             || FRAME_DISPLAY_INFO (f)->visual->class == StaticGray)        disptype = intern ("grayscale");      else        disptype = intern ("color"); @@ -5246,7 +5052,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,    /* Now that the frame will be official, it counts as a reference to       its display and terminal.  */ -  FRAME_X_DISPLAY_INFO (f)->reference_count++; +  FRAME_DISPLAY_INFO (f)->reference_count++;    f->terminal->reference_count++;    /* It is now ok to make the frame official even if we get an error @@ -5290,7 +5096,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object    if (!INTEGERP (left) || !INTEGERP (top))      {        block_input (); -      XQueryPointer (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, +      XQueryPointer (FRAME_X_DISPLAY (f), FRAME_DISPLAY_INFO (f)->root_window,  		     &root, &child, root_x, root_y, &win_x, &win_y, &pmask);        unblock_input ();      } @@ -5300,7 +5106,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object    else if (*root_y + XINT (dy) <= 0)      *root_y = 0; /* Can happen for negative dy */    else if (*root_y + XINT (dy) + height -	   <= x_display_pixel_height (FRAME_X_DISPLAY_INFO (f))) +	   <= x_display_pixel_height (FRAME_DISPLAY_INFO (f)))      /* It fits below the pointer */      *root_y += XINT (dy);    else if (height + XINT (dy) <= *root_y) @@ -5315,7 +5121,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object    else if (*root_x + XINT (dx) <= 0)      *root_x = 0; /* Can happen for negative dx */    else if (*root_x + XINT (dx) + width -	   <= x_display_pixel_width (FRAME_X_DISPLAY_INFO (f))) +	   <= x_display_pixel_width (FRAME_DISPLAY_INFO (f)))      /* It fits to the right of the pointer.  */      *root_x += XINT (dx);    else if (width + XINT (dx) <= *root_x) @@ -5464,7 +5270,7 @@ Text larger than the specified size is clipped.  */)    /* Create a frame for the tooltip, and record it in the global       variable tip_frame.  */ -  frame = x_create_tip_frame (FRAME_X_DISPLAY_INFO (f), parms, string); +  frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string);    f = XFRAME (frame);    /* Set up the frame's root window.  */ @@ -5486,7 +5292,7 @@ Text larger than the specified size is clipped.  */)      }    FRAME_TOTAL_COLS (f) = w->total_cols; -  adjust_glyphs (f); +  adjust_frame_glyphs (f);    w->pseudo_window_p = 1;    /* Display the tooltip text in a temporary buffer.  */ @@ -5554,7 +5360,7 @@ Text larger than the specified size is clipped.  */)        width /= WINDOW_FRAME_COLUMN_WIDTH (w);        w->total_cols = width;        FRAME_TOTAL_COLS (f) = width; -      adjust_glyphs (f); +      adjust_frame_glyphs (f);        clear_glyph_matrix (w->desired_matrix);        clear_glyph_matrix (w->current_matrix);        try_window (FRAME_ROOT_WINDOW (f), pos, 0); @@ -5664,7 +5470,7 @@ Value is t if tooltip was open, nil otherwise.  */)  	struct frame *f = SELECTED_FRAME ();  	w = f->output_data.x->menubar_widget; -	if (!DoesSaveUnders (FRAME_X_DISPLAY_INFO (f)->screen) +	if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen)  	    && w != NULL)  	  {  	    block_input (); @@ -6296,7 +6102,8 @@ Otherwise use Emacs own tooltip implementation.  When using Gtk+ tooltips, the tooltip face is not used.  */);    x_gtk_use_system_tooltips = 1; -  Fprovide (intern_c_string ("x"), Qnil); +  /* Tell Emacs about this window system.  */ +  Fprovide (Qx, Qnil);  #ifdef USE_X_TOOLKIT    Fprovide (intern_c_string ("x-toolkit"), Qnil); @@ -6357,7 +6164,6 @@ When using Gtk+ tooltips, the tooltip face is not used.  */);    defsubr (&Sx_close_connection);    defsubr (&Sx_display_list);    defsubr (&Sx_synchronize); -  defsubr (&Sx_focus_frame);    defsubr (&Sx_backspace_delete_keys_p);    defsubr (&Sx_show_tip); @@ -6379,5 +6185,3 @@ When using Gtk+ tooltips, the tooltip face is not used.  */);    defsubr (&Sx_select_font);  #endif  } - -#endif /* HAVE_X_WINDOWS */  | 
