X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a0b5606ec769968b10c765f8ff50f312d691ef62..3fa2054efdfa3c22456072254e6c67682a595233:/src/xfns.c diff --git a/src/xfns.c b/src/xfns.c index 0c91e298ec..38aa5b3bbf 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -22,10 +22,6 @@ along with GNU Emacs. If not, see . */ #include #include -/* This makes the fields of a Display accessible, in Xlib header files. */ - -#define XLIB_ILLEGAL_ACCESS - #include "lisp.h" #include "xterm.h" #include "frame.h" @@ -46,8 +42,6 @@ along with GNU Emacs. If not, see . */ #include "termchar.h" #include "font.h" -#ifdef HAVE_X_WINDOWS - #include #include @@ -157,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 @@ -177,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. */ @@ -378,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; @@ -441,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. */ @@ -460,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. */ @@ -581,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 @@ -774,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) { @@ -899,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) @@ -1035,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) @@ -1186,7 +999,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) block_input (); x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), - 0, y, width, height, False); + 0, y, width, height); unblock_input (); } @@ -1197,7 +1010,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) block_input (); x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), - 0, y, width, height, False); + 0, y, width, height); unblock_input (); } @@ -1205,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); } @@ -1219,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)) @@ -1233,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) { @@ -1249,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; @@ -1268,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 @@ -1295,8 +1111,8 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) if (height > 0 && width > 0) { block_input (); - x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), - 0, y, width, height, False); + x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), + 0, y, width, height); unblock_input (); } @@ -1305,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 */ } @@ -1490,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) @@ -1507,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) @@ -1522,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)); @@ -1531,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)); @@ -1579,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); @@ -1652,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. */ @@ -1678,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); @@ -1744,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) @@ -1756,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; } } @@ -1773,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); } @@ -1974,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) { @@ -2073,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; @@ -2318,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, @@ -2333,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); @@ -2349,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, @@ -2475,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. */ @@ -2635,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); } @@ -2696,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 @@ -2780,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), @@ -2846,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); @@ -2878,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; @@ -3072,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 @@ -3119,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; } @@ -3290,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 @@ -3415,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; @@ -3434,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 (); @@ -3461,8 +3273,6 @@ FRAME nil means use the selected frame. */) x_uncatch_errors (); unblock_input (); - - return Qnil; } @@ -3943,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); @@ -4223,7 +4033,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)); @@ -4435,11 +4245,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)) @@ -4483,11 +4288,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 (); @@ -4734,7 +4534,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 (); @@ -5030,8 +4830,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 @@ -5145,14 +4945,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; @@ -5170,7 +4970,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. */ @@ -5178,7 +4978,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 (); @@ -5213,10 +5013,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"); @@ -5250,7 +5050,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 @@ -5294,7 +5094,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 (); } @@ -5304,7 +5104,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) @@ -5319,7 +5119,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) @@ -5468,7 +5268,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. */ @@ -5490,7 +5290,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. */ @@ -5558,7 +5358,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); @@ -5668,7 +5468,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 (); @@ -6300,7 +6100,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); @@ -6361,7 +6162,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); @@ -6383,5 +6183,3 @@ When using Gtk+ tooltips, the tooltip face is not used. */); defsubr (&Sx_select_font); #endif } - -#endif /* HAVE_X_WINDOWS */