(x_screen): Make this var file scope.
(Fx_server_version): Use Fcons, not list3. (Fx_server_vendor, Fx_server_version, Fx_display_pixel_width) (Fx_display_pixel_height, Fx_display_mm_width, Fx_display_mm_height) (Fx_display_screens, Fx_display_planes, Fx_display_color_cells) (Fx_display_visual_class, Fx_display_backing_store) (Fx_display_save_under): New functions. (x_screen_count, Vx_vendor, x_release, x_screen_height_mm) (x_screen_width_mm, Vx_backing_store, x_save_under, Vx_screen_visual) (x_visual_strings): Vars deleted. (Fx_open_connection): Don't init those vars. (syms_of_xfns): Set up new functions. Don't set up those vars as Lisp vars. Nor x-screen-width and x-screen-height.
This commit is contained in:
parent
5e15f62581
commit
41beb8fc13
1 changed files with 163 additions and 92 deletions
255
src/xfns.c
255
src/xfns.c
|
@ -60,55 +60,24 @@ Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape;
|
|||
/* Color of chars displayed in cursor box. */
|
||||
Lisp_Object Vx_cursor_fore_pixel;
|
||||
|
||||
/* The screen being used. */
|
||||
static Screen *x_screen;
|
||||
|
||||
/* The X Visual we are using for X windows (the default) */
|
||||
Visual *screen_visual;
|
||||
|
||||
/* How many screens this X display has. */
|
||||
int x_screen_count;
|
||||
|
||||
/* The vendor supporting this X server. */
|
||||
Lisp_Object Vx_vendor;
|
||||
|
||||
/* The vendor's release number for this X server. */
|
||||
int x_release;
|
||||
|
||||
/* Height of this X screen in pixels. */
|
||||
int x_screen_height;
|
||||
|
||||
/* Height of this X screen in millimeters. */
|
||||
int x_screen_height_mm;
|
||||
|
||||
/* Width of this X screen in pixels. */
|
||||
int x_screen_width;
|
||||
|
||||
/* Width of this X screen in millimeters. */
|
||||
int x_screen_width_mm;
|
||||
|
||||
/* Does this X screen do backing store? */
|
||||
Lisp_Object Vx_backing_store;
|
||||
|
||||
/* Does this X screen do save-unders? */
|
||||
int x_save_under;
|
||||
|
||||
/* Number of planes for this screen. */
|
||||
int x_screen_planes;
|
||||
|
||||
/* X Visual type of this screen. */
|
||||
Lisp_Object Vx_screen_visual;
|
||||
|
||||
/* Non nil if no window manager is in use. */
|
||||
Lisp_Object Vx_no_window_manager;
|
||||
|
||||
static char *x_visual_strings[] =
|
||||
{
|
||||
"StaticGray",
|
||||
"GrayScale",
|
||||
"StaticColor",
|
||||
"PseudoColor",
|
||||
"TrueColor",
|
||||
"DirectColor"
|
||||
};
|
||||
|
||||
/* `t' if a mouse button is depressed. */
|
||||
|
||||
Lisp_Object Vmouse_depressed;
|
||||
|
@ -2333,6 +2302,152 @@ DEFUN ("x-color-display-p", Fx_color_display_p, Sx_color_display_p, 0, 0, 0,
|
|||
}
|
||||
}
|
||||
|
||||
DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width,
|
||||
0, 1, 0,
|
||||
"Returns the width in pixels of the display FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
Display *dpy = x_current_display;
|
||||
return make_number (DisplayWidth (dpy, DefaultScreen (dpy)));
|
||||
}
|
||||
|
||||
DEFUN ("x-display-pixel-height", Fx_display_pixel_height,
|
||||
Sx_display_pixel_height, 0, 1, 0,
|
||||
"Returns the height in pixels of the display FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
Display *dpy = x_current_display;
|
||||
return make_number (DisplayHeight (dpy, DefaultScreen (dpy)));
|
||||
}
|
||||
|
||||
DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes,
|
||||
0, 1, 0,
|
||||
"Returns the number of bitplanes of the display FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
Display *dpy = x_current_display;
|
||||
return make_number (DisplayPlanes (dpy, DefaultScreen (dpy)));
|
||||
}
|
||||
|
||||
DEFUN ("x-display-color-cells", Fx_display_color_cells, Sx_display_color_cells,
|
||||
0, 1, 0,
|
||||
"Returns the number of color cells of the display FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
Display *dpy = x_current_display;
|
||||
return make_number (DisplayCells (dpy, DefaultScreen (dpy)));
|
||||
}
|
||||
|
||||
DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
|
||||
"Returns the vendor ID string of the X server FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
Display *dpy = x_current_display;
|
||||
char *vendor;
|
||||
vendor = ServerVendor (dpy);
|
||||
if (! vendor) vendor = "";
|
||||
return build_string (vendor);
|
||||
}
|
||||
|
||||
DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
|
||||
"Returns the version numbers of the X server in use.\n\
|
||||
The value is a list of three integers: the major and minor\n\
|
||||
version numbers of the X Protocol in use, and the vendor-specific release\n\
|
||||
number. See also the variable `x-server-vendor'.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
Display *dpy = x_current_display;
|
||||
return Fcons (make_number (ProtocolVersion (dpy)),
|
||||
Fcons (make_number (ProtocolRevision (dpy)),
|
||||
Fcons (make_number (VendorRelease (dpy)), Qnil)));
|
||||
}
|
||||
|
||||
DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0,
|
||||
"Returns the number of screens on the X server FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
return make_number (ScreenCount (x_current_display));
|
||||
}
|
||||
|
||||
DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 1, 0,
|
||||
"Returns the height in millimeters of the X screen FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
return make_number (HeightMMOfScreen (x_screen));
|
||||
}
|
||||
|
||||
DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0,
|
||||
"Returns the width in millimeters of the X screen FRAME is on.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
return make_number (WidthMMOfScreen (x_screen));
|
||||
}
|
||||
|
||||
DEFUN ("x-display-backing-store", Fx_display_backing_store,
|
||||
Sx_display_backing_store, 0, 1, 0,
|
||||
"Returns an indication of whether the X screen FRAME is on does backing store.\n\
|
||||
The value may be `always', `when-mapped', or `not-useful'.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
switch (DoesBackingStore (x_screen))
|
||||
{
|
||||
case Always:
|
||||
return intern ("always");
|
||||
|
||||
case WhenMapped:
|
||||
return intern ("when-mapped");
|
||||
|
||||
case NotUseful:
|
||||
return intern ("not-useful");
|
||||
|
||||
default:
|
||||
error ("Strange value for BackingStore parameter of screen");
|
||||
}
|
||||
}
|
||||
|
||||
DEFUN ("x-display-visual-class", Fx_display_visual_class,
|
||||
Sx_display_visual_class, 0, 1, 0,
|
||||
"Returns the visual class of the display `screen' is on.\n\
|
||||
The value is one of the symbols `static-gray', `gray-scale',\n\
|
||||
`static-color', `pseudo-color', `true-color', or `direct-color'.")
|
||||
(screen)
|
||||
Lisp_Object screen;
|
||||
{
|
||||
switch (screen_visual->class)
|
||||
{
|
||||
case StaticGray: return (intern ("static-gray"));
|
||||
case GrayScale: return (intern ("gray-scale"));
|
||||
case StaticColor: return (intern ("static-color"));
|
||||
case PseudoColor: return (intern ("pseudo-color"));
|
||||
case TrueColor: return (intern ("true-color"));
|
||||
case DirectColor: return (intern ("direct-color"));
|
||||
default:
|
||||
error ("Display has an unknown visual class");
|
||||
}
|
||||
}
|
||||
|
||||
DEFUN ("x-display-save-under", Fx_display_save_under,
|
||||
Sx_display_save_under, 0, 1, 0,
|
||||
"Returns t if the X screen FRAME is on supports the save-under feature.")
|
||||
(frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
if (DoesSaveUnders (x_screen) == True)
|
||||
return Qt;
|
||||
else
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
x_pixel_width (f)
|
||||
register struct frame *f;
|
||||
{
|
||||
|
@ -3621,7 +3736,6 @@ arg XRM_STRING is a string of resources in xrdb format.")
|
|||
Lisp_Object display, xrm_string;
|
||||
{
|
||||
unsigned int n_planes;
|
||||
register Screen *x_screen;
|
||||
unsigned char *xrm_option;
|
||||
|
||||
CHECK_STRING (display, 0);
|
||||
|
@ -3647,42 +3761,10 @@ arg XRM_STRING is a string of resources in xrdb format.")
|
|||
|
||||
x_screen = DefaultScreenOfDisplay (x_current_display);
|
||||
|
||||
x_screen_count = ScreenCount (x_current_display);
|
||||
Vx_vendor = build_string (ServerVendor (x_current_display));
|
||||
x_release = VendorRelease (x_current_display);
|
||||
|
||||
x_screen_height = HeightOfScreen (x_screen);
|
||||
x_screen_height_mm = HeightMMOfScreen (x_screen);
|
||||
x_screen_width = WidthOfScreen (x_screen);
|
||||
x_screen_width_mm = WidthMMOfScreen (x_screen);
|
||||
|
||||
switch (DoesBackingStore (x_screen))
|
||||
{
|
||||
case Always:
|
||||
Vx_backing_store = intern ("Always");
|
||||
break;
|
||||
|
||||
case WhenMapped:
|
||||
Vx_backing_store = intern ("WhenMapped");
|
||||
break;
|
||||
|
||||
case NotUseful:
|
||||
Vx_backing_store = intern ("NotUseful");
|
||||
break;
|
||||
|
||||
default:
|
||||
error ("Strange value for BackingStore.");
|
||||
break;
|
||||
}
|
||||
|
||||
if (DoesSaveUnders (x_screen) == True)
|
||||
x_save_under = 1;
|
||||
else
|
||||
x_save_under = 0;
|
||||
|
||||
screen_visual = select_visual (x_screen, &n_planes);
|
||||
x_screen_planes = n_planes;
|
||||
Vx_screen_visual = intern (x_visual_strings [screen_visual->class]);
|
||||
x_screen_height = HeightOfScreen (x_screen);
|
||||
x_screen_width = WidthOfScreen (x_screen);
|
||||
|
||||
/* X Atoms used by emacs. */
|
||||
Xatoms_of_xselect ();
|
||||
|
@ -3843,29 +3925,6 @@ syms_of_xfns ()
|
|||
"Non-nil if a mouse button is currently depressed.");
|
||||
Vmouse_depressed = Qnil;
|
||||
|
||||
DEFVAR_INT ("x-screen-count", &x_screen_count,
|
||||
"The number of screens associated with the current display.");
|
||||
DEFVAR_INT ("x-release", &x_release,
|
||||
"The release number of the X server in use.");
|
||||
DEFVAR_LISP ("x-vendor", &Vx_vendor,
|
||||
"The vendor supporting the X server in use.");
|
||||
DEFVAR_INT ("x-screen-height", &x_screen_height,
|
||||
"The height of this X screen in pixels.");
|
||||
DEFVAR_INT ("x-screen-height-mm", &x_screen_height_mm,
|
||||
"The height of this X screen in millimeters.");
|
||||
DEFVAR_INT ("x-screen-width", &x_screen_width,
|
||||
"The width of this X screen in pixels.");
|
||||
DEFVAR_INT ("x-screen-width-mm", &x_screen_width_mm,
|
||||
"The width of this X screen in millimeters.");
|
||||
DEFVAR_LISP ("x-backing-store", &Vx_backing_store,
|
||||
"The backing store capability of this screen.\n\
|
||||
Values can be the symbols Always, WhenMapped, or NotUseful.");
|
||||
DEFVAR_BOOL ("x-save-under", &x_save_under,
|
||||
"*Non-nil means this X screen supports the SaveUnder feature.");
|
||||
DEFVAR_INT ("x-screen-planes", &x_screen_planes,
|
||||
"The number of planes this monitor supports.");
|
||||
DEFVAR_LISP ("x-screen-visual", &Vx_screen_visual,
|
||||
"The default X visual for this X screen.");
|
||||
DEFVAR_LISP ("x-no-window-manager", &Vx_no_window_manager,
|
||||
"t if no X window manager is in use.");
|
||||
|
||||
|
@ -3879,6 +3938,18 @@ Values can be the symbols Always, WhenMapped, or NotUseful.");
|
|||
#endif
|
||||
defsubr (&Sx_color_display_p);
|
||||
defsubr (&Sx_defined_color);
|
||||
defsubr (&Sx_server_vendor);
|
||||
defsubr (&Sx_server_version);
|
||||
defsubr (&Sx_display_pixel_width);
|
||||
defsubr (&Sx_display_pixel_height);
|
||||
defsubr (&Sx_display_mm_width);
|
||||
defsubr (&Sx_display_mm_height);
|
||||
defsubr (&Sx_display_screens);
|
||||
defsubr (&Sx_display_planes);
|
||||
defsubr (&Sx_display_color_cells);
|
||||
defsubr (&Sx_display_visual_class);
|
||||
defsubr (&Sx_display_backing_store);
|
||||
defsubr (&Sx_display_save_under);
|
||||
#if 0
|
||||
defsubr (&Sx_track_pointer);
|
||||
defsubr (&Sx_grab_pointer);
|
||||
|
|
Loading…
Add table
Reference in a new issue