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 */