annotate src/xfns.c @ 49411:bf2edead9a8f

*** empty log message ***
author John Paul Wallington <jpw@pobox.com>
date Fri, 24 Jan 2003 04:54:17 +0000
parents 2cbb0b823e83
children a4d0ee33dcce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Functions for the X window system.
35068
e6fe439553cf Update copyright.
Gerd Moellmann <gerd@gnu.org>
parents: 35067
diff changeset
2 Copyright (C) 1989, 92, 93, 94, 95, 96, 1997, 1998, 1999, 2000, 2001
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3 Free Software Foundation.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 700
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13867
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13867
diff changeset
20 Boston, MA 02111-1307, USA. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26032
diff changeset
22 #include <config.h>
7899
facf6b0e97ff Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7860
diff changeset
23 #include <signal.h>
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
24 #include <stdio.h>
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
25 #include <math.h>
7899
facf6b0e97ff Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7860
diff changeset
26
40700
6f6287da52d1 Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
27 #ifdef HAVE_UNISTD_H
6f6287da52d1 Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
28 #include <unistd.h>
6f6287da52d1 Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
29 #endif
6f6287da52d1 Include unistd.h, if it exists.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
30
8091
f40cbe50c74f (XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8090
diff changeset
31 /* This makes the fields of a Display accessible, in Xlib header files. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
32
8091
f40cbe50c74f (XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8090
diff changeset
33 #define XLIB_ILLEGAL_ACCESS
f40cbe50c74f (XLIB_ILLEGAL_ACCESS): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8090
diff changeset
34
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #include "lisp.h"
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 #include "xterm.h"
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
37 #include "frame.h"
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #include "window.h"
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include "buffer.h"
26876
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
40 #include "intervals.h"
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 #include "dispextern.h"
515
0005d4c90c97 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
42 #include "keyboard.h"
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2355
diff changeset
43 #include "blockinput.h"
24412
d11ac02f9d6a Use epaths.h istead of paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 24170
diff changeset
44 #include <epaths.h>
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
45 #include "charset.h"
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
46 #include "coding.h"
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
47 #include "fontset.h"
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
48 #include "systime.h"
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
49 #include "termhooks.h"
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
50 #include "atimer.h"
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #ifdef HAVE_X_WINDOWS
25451
786ab5197e4b Include <stdlib.h> if available, and declare abort only if not. Include
Andreas Schwab <schwab@suse.de>
parents: 25390
diff changeset
53
786ab5197e4b Include <stdlib.h> if available, and declare abort only if not. Include
Andreas Schwab <schwab@suse.de>
parents: 25390
diff changeset
54 #include <ctype.h>
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
55 #include <sys/types.h>
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
56 #include <sys/stat.h>
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
2355
cec8c9490d8a * xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents: 2341
diff changeset
58 #ifndef VMS
3821
8f353c2491d0 * xfns.c: Always #include "bitmaps/gray.xbm"; the bitmaps seem to
Jim Blandy <jimb@redhat.com>
parents: 3692
diff changeset
59 #if 1 /* Used to be #ifdef EMACS_BITMAP_FILES, but this should always work. */
3512
2657b04dd324 [EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents: 3507
diff changeset
60 #include "bitmaps/gray.xbm"
2657b04dd324 [EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents: 3507
diff changeset
61 #else
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
62 #include <X11/bitmaps/gray>
3512
2657b04dd324 [EMACS_BIT_MAPS]: Include gray.xbm from ./bitmaps.
Richard M. Stallman <rms@gnu.org>
parents: 3507
diff changeset
63 #endif
2355
cec8c9490d8a * xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents: 2341
diff changeset
64 #else
cec8c9490d8a * xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents: 2341
diff changeset
65 #include "[.bitmaps]gray.xbm"
cec8c9490d8a * xfns.c [VMS]: Get the gray_bits from [.bitmaps]gray.xbm.
Jim Blandy <jimb@redhat.com>
parents: 2341
diff changeset
66 #endif
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
67
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
68 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
69 #include "gtkutil.h"
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
70 #endif
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
71
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
72 #ifdef USE_X_TOOLKIT
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
73 #include <X11/Shell.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
74
12616
ca170048a679 [USE_MOTIF]: Don't include X11/Xaw/Paned.h, X11/Xaw/Label.h.
Richard M. Stallman <rms@gnu.org>
parents: 12546
diff changeset
75 #ifndef USE_MOTIF
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
76 #include <X11/Xaw/Paned.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
77 #include <X11/Xaw/Label.h>
12616
ca170048a679 [USE_MOTIF]: Don't include X11/Xaw/Paned.h, X11/Xaw/Label.h.
Richard M. Stallman <rms@gnu.org>
parents: 12546
diff changeset
78 #endif /* USE_MOTIF */
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
79
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
80 #ifdef USG
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
81 #undef USG /* ####KLUDGE for Solaris 2.2 and up */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
82 #include <X11/Xos.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
83 #define USG
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
84 #else
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
85 #include <X11/Xos.h>
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
86 #endif
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
87
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
88 #include "widget.h"
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
89
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
90 #include "../lwlib/lwlib.h"
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
91
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
92 #ifdef USE_MOTIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
93 #include <Xm/Xm.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
94 #include <Xm/DialogS.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
95 #include <Xm/FileSB.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
96 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
97
13508
b64345cf1ee9 (HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents: 13227
diff changeset
98 /* Do the EDITRES protocol if running X11R5
b64345cf1ee9 (HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents: 13227
diff changeset
99 Exception: HP-UX (at least version A.09.05) has X11R5 without EditRes */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
100
13508
b64345cf1ee9 (HACK_EDITRES): Don't define if NO_EDITRES is defined.
Richard M. Stallman <rms@gnu.org>
parents: 13227
diff changeset
101 #if (XtSpecificationRelease >= 5) && !defined(NO_EDITRES)
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
102 #define HACK_EDITRES
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
103 extern void _XEditResCheckMessages ();
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
104 #endif /* R5 + Athena */
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
105
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
106 /* Unique id counter for widgets created by the Lucid Widget Library. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
107
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
108 extern LWLIB_ID widget_id_tick;
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
109
15720
f1549b7501af (Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents: 15706
diff changeset
110 #ifdef USE_LUCID
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
111 /* This is part of a kludge--see lwlib/xlwmenu.c. */
15706
bf891f379d9f (xlwmenu_default_font): Declare, but don't define.
Karl Heuer <kwzh@gnu.org>
parents: 15704
diff changeset
112 extern XFontStruct *xlwmenu_default_font;
15720
f1549b7501af (Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents: 15706
diff changeset
113 #endif
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
114
5900
284c0d70a50a (x_set_menu_bar_lines) [USE_X_TOOLKIT]: Dont Call XtDestroyWidget but
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5899
diff changeset
115 extern void free_frame_menubar ();
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
116 extern double atof ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
117
37210
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
118 #ifdef USE_MOTIF
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
119
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
120 /* LessTif/Motif version info. */
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
121
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
122 static Lisp_Object Vmotif_version_string;
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
123
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
124 #endif /* USE_MOTIF */
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
125
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
126 #endif /* USE_X_TOOLKIT */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
127
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
128 #ifdef HAVE_X11R4
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
129 #define MAXREQUEST(dpy) (XMaxRequestSize (dpy))
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
130 #else
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
131 #define MAXREQUEST(dpy) ((dpy)->max_request_size)
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
132 #endif
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
133
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
134 /* The gray bitmap `bitmaps/gray'. This is done because xterm.c uses
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
135 it, and including `bitmaps/gray' more than once is a problem when
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
136 config.h defines `static' as an empty replacement string. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
137
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
138 int gray_bitmap_width = gray_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
139 int gray_bitmap_height = gray_height;
34512
d069886667e6 (gray_bitmap_bits): Declare `char *'.
Gerd Moellmann <gerd@gnu.org>
parents: 34476
diff changeset
140 char *gray_bitmap_bits = gray_bits;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
141
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
142 /* The name we're using in resource queries. Most often "emacs". */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
143
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
144 Lisp_Object Vx_resource_name;
3170
647229114f47 * xfns.c: Make resource manager work correctly even when
Jim Blandy <jimb@redhat.com>
parents: 3141
diff changeset
145
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
146 /* The application class we're using in resource queries.
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
147 Normally "Emacs". */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
148
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
149 Lisp_Object Vx_resource_class;
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
150
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
151 /* Non-zero means we're allowed to display an hourglass cursor. */
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
152
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
153 int display_hourglass_p;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
154
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 /* The background and shape of the mouse pointer, and shape when not
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
156 over text or in the modeline. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
157
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape;
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
159 Lisp_Object Vx_hourglass_pointer_shape;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
160
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
161 /* The shape when over mouse-sensitive text. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
162
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
163 Lisp_Object Vx_sensitive_text_pointer_shape;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164
33960
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
165 /* If non-nil, the pointer shape to indicate that windows can be
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
166 dragged horizontally. */
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
167
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
168 Lisp_Object Vx_window_horizontal_drag_shape;
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
169
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
170 /* Color of chars displayed in cursor box. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
171
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 Lisp_Object Vx_cursor_fore_pixel;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
174 /* Nonzero if using X. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
175
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
176 static int x_in_use;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
177
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
178 /* Non nil if no window manager is in use. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
179
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 Lisp_Object Vx_no_window_manager;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
182 /* Search path for bitmap files. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
183
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
184 Lisp_Object Vx_bitmap_file_path;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
185
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
186 /* Regexp matching a font name whose width is the same as `PIXEL_SIZE'. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
187
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
188 Lisp_Object Vx_pixel_size_width_font_regexp;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
189
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
190 Lisp_Object Qauto_raise;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
191 Lisp_Object Qauto_lower;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
192 Lisp_Object Qborder_color;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
193 Lisp_Object Qborder_width;
47189
4e4edde4b0a6 (Qbox): Declare external, don't define.
Richard M. Stallman <rms@gnu.org>
parents: 47159
diff changeset
194 extern Lisp_Object Qbox;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
195 Lisp_Object Qcursor_color;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
196 Lisp_Object Qcursor_type;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
197 Lisp_Object Qgeometry;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
198 Lisp_Object Qicon_left;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
199 Lisp_Object Qicon_top;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
200 Lisp_Object Qicon_type;
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
201 Lisp_Object Qicon_name;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
202 Lisp_Object Qinternal_border_width;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
203 Lisp_Object Qleft;
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
204 Lisp_Object Qright;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
205 Lisp_Object Qmouse_color;
1874
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
206 Lisp_Object Qnone;
23793
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
207 Lisp_Object Qouter_window_id;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
208 Lisp_Object Qparent_id;
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
209 Lisp_Object Qscroll_bar_width;
2328
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
210 Lisp_Object Qsuppress_icon;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
211 extern Lisp_Object Qtop;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 Lisp_Object Qundefined_color;
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
213 Lisp_Object Qvertical_scroll_bars;
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
214 Lisp_Object Qvisibility;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
215 Lisp_Object Qwindow_id;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
216 Lisp_Object Qx_frame_parameter;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
217 Lisp_Object Qx_resource_name;
7251
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
218 Lisp_Object Quser_position;
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
219 Lisp_Object Quser_size;
26571
bc95d8e47cb9 Don't duplicate Qdisplay definition done elsewhere.
Dave Love <fx@gnu.org>
parents: 26526
diff changeset
220 extern Lisp_Object Qdisplay;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
221 Lisp_Object Qscroll_bar_foreground, Qscroll_bar_background;
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
222 Lisp_Object Qscreen_gamma, Qline_spacing, Qcenter;
35402
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
223 Lisp_Object Qcompound_text, Qcancel_timer;
38183
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
224 Lisp_Object Qwait_for_wm;
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
225 Lisp_Object Qfullscreen;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
226 Lisp_Object Qfullwidth;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
227 Lisp_Object Qfullheight;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
228 Lisp_Object Qfullboth;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
229
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
230 /* The below are defined in frame.c. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
231
1874
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
232 extern Lisp_Object Qheight, Qminibuffer, Qname, Qonly, Qwidth;
14381
4d038c841cf4 (Qtitle): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
233 extern Lisp_Object Qunsplittable, Qmenu_bar_lines, Qbuffer_predicate, Qtitle;
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
234 extern Lisp_Object Qtool_bar_lines;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
235
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 extern Lisp_Object Vwindow_system_version;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237
18631
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
238 Lisp_Object Qface_set_after_frame_default;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
239
34895
53e52b3525bf Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents: 34662
diff changeset
240 #if GLYPH_DEBUG
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
241 int image_cache_refcount, dpyinfo_refcount;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
242 #endif
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
243
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
244
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
246 /* Error if we are not connected to X. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
247
5948
ef777779bd80 (check_x): Make it global.
Karl Heuer <kwzh@gnu.org>
parents: 5900
diff changeset
248 void
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
249 check_x ()
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
250 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
251 if (! x_in_use)
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
252 error ("X windows are not in use or not initialized");
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
253 }
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
254
13867
19a05b5a597d (check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents: 13781
diff changeset
255 /* Nonzero if we can use mouse menus.
19a05b5a597d (check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents: 13781
diff changeset
256 You should not call this unless HAVE_MENUS is defined. */
7791
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
257
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
258 int
13867
19a05b5a597d (check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents: 13781
diff changeset
259 have_menus_p ()
7791
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
260 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
261 return x_in_use;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
262 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
263
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
264 /* Extract a frame as a FRAME_PTR, defaulting to the selected frame
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
265 and checking validity for X. */
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
266
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
267 FRAME_PTR
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
268 check_x_frame (frame)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
269 Lisp_Object frame;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
270 {
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
271 FRAME_PTR f;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
272
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
273 if (NILP (frame))
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
274 frame = selected_frame;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
275 CHECK_LIVE_FRAME (frame);
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
276 f = XFRAME (frame);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
277 if (! FRAME_X_P (f))
13867
19a05b5a597d (check_x_display_info, check_x_frame, x_set_font)
Richard M. Stallman <rms@gnu.org>
parents: 13781
diff changeset
278 error ("Non-X frame used");
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
279 return f;
7791
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
280 }
2b4e4a76468b (using_x_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7683
diff changeset
281
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
282 /* Let the user specify an X display with a frame.
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
283 nil stands for the selected frame--or, if that is not an X frame,
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
284 the first X display on the list. */
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
285
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
286 static struct x_display_info *
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
287 check_x_display_info (frame)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
288 Lisp_Object frame;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
289 {
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
290 struct x_display_info *dpyinfo = NULL;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
291
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
292 if (NILP (frame))
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
293 {
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
294 struct frame *sf = XFRAME (selected_frame);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
295
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
296 if (FRAME_X_P (sf) && FRAME_LIVE_P (sf))
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
297 dpyinfo = FRAME_X_DISPLAY_INFO (sf);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
298 else if (x_display_list != 0)
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
299 dpyinfo = x_display_list;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
300 else
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
301 error ("X windows are not in use or not initialized");
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
302 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
303 else if (STRINGP (frame))
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
304 dpyinfo = x_display_info_for_name (frame);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
305 else
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
306 {
45968
6bf20f37b7c7 (check_x_display_info): Use check_x_frame.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45603
diff changeset
307 FRAME_PTR f = check_x_frame (frame);
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
308 dpyinfo = FRAME_X_DISPLAY_INFO (f);
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
309 }
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
310
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
311 return dpyinfo;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
312 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
313
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
314
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
315 /* Return the Emacs frame-object corresponding to an X window.
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
316 It could be the frame's main window or an icon window. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
317
9948
982820033564 (x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents: 9813
diff changeset
318 /* This function can be called during GC, so use GC_xxx type test macros. */
2964
a0ff2bc5dd05 (x_window_to_frame): Use XGCTYPE.
Richard M. Stallman <rms@gnu.org>
parents: 2936
diff changeset
319
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
320 struct frame *
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
321 x_window_to_frame (dpyinfo, wdesc)
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
322 struct x_display_info *dpyinfo;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 int wdesc;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
325 Lisp_Object tail, frame;
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
326 struct frame *f;
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
327
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
328 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
329 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
330 frame = XCAR (tail);
9948
982820033564 (x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents: 9813
diff changeset
331 if (!GC_FRAMEP (frame))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 continue;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
333 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
334 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
335 continue;
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
336 if (f->output_data.x->hourglass_window == wdesc)
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
337 return f;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
338 #ifdef USE_X_TOOLKIT
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
339 if ((f->output_data.x->edit_widget
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
340 && XtWindow (f->output_data.x->edit_widget) == wdesc)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
341 /* A tooltip frame? */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
342 || (!f->output_data.x->edit_widget
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
343 && FRAME_X_WINDOW (f) == wdesc)
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
344 || f->output_data.x->icon_desc == wdesc)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
345 return f;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
346 #else /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
347 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
348 if (f->output_data.x->edit_widget)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
349 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
350 GtkWidget *gwdesc = xg_win_to_widget (wdesc);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
351 struct x_output *x = f->output_data.x;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
352 if (gwdesc != 0 && gwdesc == x->edit_widget)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
353 return f;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
354 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
355 #endif /* USE_GTK */
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
356 if (FRAME_X_WINDOW (f) == wdesc
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
357 || f->output_data.x->icon_desc == wdesc)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
358 return f;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
359 #endif /* not USE_X_TOOLKIT */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 return 0;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
364 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
365 /* Like x_window_to_frame but also compares the window with the widget's
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
366 windows. */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
367
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
368 struct frame *
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
369 x_any_window_to_frame (dpyinfo, wdesc)
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
370 struct x_display_info *dpyinfo;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
371 int wdesc;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
372 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
373 Lisp_Object tail, frame;
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
374 struct frame *f, *found;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
375 struct x_output *x;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
376
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
377 found = NULL;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
378 for (tail = Vframe_list; GC_CONSP (tail) && !found; tail = XCDR (tail))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
379 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
380 frame = XCAR (tail);
9948
982820033564 (x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents: 9813
diff changeset
381 if (!GC_FRAMEP (frame))
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
382 continue;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
383
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
384 f = XFRAME (frame);
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
385 if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
386 {
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
387 /* This frame matches if the window is any of its widgets. */
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
388 x = f->output_data.x;
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
389 if (x->hourglass_window == wdesc)
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
390 found = f;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
391 else if (x->widget)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
392 {
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
393 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
394 GtkWidget *gwdesc = xg_win_to_widget (wdesc);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
395 if (gwdesc != 0
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
396 && (gwdesc == x->widget
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
397 || gwdesc == x->edit_widget
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
398 || gwdesc == x->vbox_widget
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
399 || gwdesc == x->menubar_widget))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
400 found = f;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
401 #else
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
402 if (wdesc == XtWindow (x->widget)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
403 || wdesc == XtWindow (x->column_widget)
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
404 || wdesc == XtWindow (x->edit_widget))
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
405 found = f;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
406 /* Match if the window is this frame's menubar. */
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
407 else if (lw_window_is_in_menubar (wdesc, x->menubar_widget))
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
408 found = f;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
409 #endif
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
410 }
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
411 else if (FRAME_X_WINDOW (f) == wdesc)
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
412 /* A tooltip frame. */
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
413 found = f;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
414 }
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
415 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
416
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
417 return found;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
418 }
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
419
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
420 /* Likewise, but exclude the menu bar widget. */
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
421
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
422 struct frame *
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
423 x_non_menubar_window_to_frame (dpyinfo, wdesc)
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
424 struct x_display_info *dpyinfo;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
425 int wdesc;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
426 {
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
427 Lisp_Object tail, frame;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
428 struct frame *f;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
429 struct x_output *x;
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
430
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
431 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
432 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
433 frame = XCAR (tail);
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
434 if (!GC_FRAMEP (frame))
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
435 continue;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
436 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
437 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
438 continue;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
439 x = f->output_data.x;
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
440 /* This frame matches if the window is any of its widgets. */
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
441 if (x->hourglass_window == wdesc)
27798
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
442 return f;
d00730392332 (x_window_to_frame, x_any_window_to_frame)
Gerd Moellmann <gerd@gnu.org>
parents: 27659
diff changeset
443 else if (x->widget)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
444 {
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
445 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
446 GtkWidget *gwdesc = xg_win_to_widget (wdesc);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
447 if (gwdesc != 0
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
448 && (gwdesc == x->widget
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
449 || gwdesc == x->edit_widget
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
450 || gwdesc == x->vbox_widget))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
451 return f;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
452 #else
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
453 if (wdesc == XtWindow (x->widget)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
454 || wdesc == XtWindow (x->column_widget)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
455 || wdesc == XtWindow (x->edit_widget))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
456 return f;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
457 #endif
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
458 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
459 else if (FRAME_X_WINDOW (f) == wdesc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
460 /* A tooltip frame. */
11611
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
461 return f;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
462 }
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
463 return 0;
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
464 }
bf53e9945a3c (x_non_menubar_window_to_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 11537
diff changeset
465
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
466 /* Likewise, but consider only the menu bar widget. */
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
467
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
468 struct frame *
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
469 x_menubar_window_to_frame (dpyinfo, wdesc)
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
470 struct x_display_info *dpyinfo;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
471 int wdesc;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
472 {
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
473 Lisp_Object tail, frame;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
474 struct frame *f;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
475 struct x_output *x;
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
476
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
477 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
478 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
479 frame = XCAR (tail);
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
480 if (!GC_FRAMEP (frame))
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
481 continue;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
482 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
483 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
484 continue;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
485 x = f->output_data.x;
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
486 /* Match if the window is this frame's menubar. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
487 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
488 if (x->menubar_widget)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
489 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
490 GtkWidget *gwdesc = xg_win_to_widget (wdesc);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
491 int found = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
492
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
493 BLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
494 if (gwdesc != 0
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
495 && (gwdesc == x->menubar_widget
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
496 || gtk_widget_get_parent (gwdesc) == x->menubar_widget))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
497 found = 1;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
498 UNBLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
499 if (found) return f;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
500 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
501 #else
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
502 if (x->menubar_widget
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
503 && lw_window_is_in_menubar (wdesc, x->menubar_widget))
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
504 return f;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
505 #endif
12656
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
506 }
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
507 return 0;
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
508 }
5beb1d2be5c1 (x_menubar_window_to_frame): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12616
diff changeset
509
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
510 /* Return the frame whose principal (outermost) window is WDESC.
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
511 If WDESC is some other (smaller) window, we return 0. */
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
512
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
513 struct frame *
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
514 x_top_window_to_frame (dpyinfo, wdesc)
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
515 struct x_display_info *dpyinfo;
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
516 int wdesc;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
517 {
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
518 Lisp_Object tail, frame;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
519 struct frame *f;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
520 struct x_output *x;
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
521
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
522 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
523 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
524 frame = XCAR (tail);
9948
982820033564 (x_window_to_frame, x_any_window_to_frame, x_top_window_to_frame): Use the new
Karl Heuer <kwzh@gnu.org>
parents: 9813
diff changeset
525 if (!GC_FRAMEP (frame))
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
526 continue;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
527 f = XFRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
528 if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
11197
1bdc265aab86 (x_window_to_frame): New arg DPYINFO. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11060
diff changeset
529 continue;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
530 x = f->output_data.x;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
531
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
532 if (x->widget)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
533 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
534 /* This frame matches if the window is its topmost widget. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
535 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
536 GtkWidget *gwdesc = xg_win_to_widget (wdesc);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
537 if (gwdesc == x->widget)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
538 return f;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
539 #else
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
540 if (wdesc == XtWindow (x->widget))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
541 return f;
12019
63ee64941021 (x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents: 12011
diff changeset
542 #if 0 /* I don't know why it did this,
63ee64941021 (x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents: 12011
diff changeset
543 but it seems logically wrong,
63ee64941021 (x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents: 12011
diff changeset
544 and it causes trouble for MapNotify events. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
545 /* Match if the window is this frame's menubar. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
546 if (x->menubar_widget
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
547 && wdesc == XtWindow (x->menubar_widget))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
548 return f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
549 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
550 #endif
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
551 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
552 else if (FRAME_X_WINDOW (f) == wdesc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
553 /* Tooltip frame. */
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
554 return f;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
555 }
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
556 return 0;
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
557 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
558 #endif /* USE_X_TOOLKIT || USE_GTK */
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
559
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
561
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
562 /* Code to deal with bitmaps. Bitmaps are referenced by their bitmap
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
563 id, which is just an int that this section returns. Bitmaps are
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
564 reference counted so they can be shared among frames.
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
565
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
566 Bitmap indices are guaranteed to be > 0, so a negative number can
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
567 be used to indicate no bitmap.
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
568
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
569 If you use x_create_bitmap_from_data, then you must keep track of
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
570 the bitmaps yourself. That is, creating a bitmap from the same
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
571 data more than once will not be caught. */
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
572
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
573
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
574 /* Functions to access the contents of a bitmap, given an id. */
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
575
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
576 int
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
577 x_bitmap_height (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
578 FRAME_PTR f;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
579 int id;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
580 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
581 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].height;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
582 }
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
583
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
584 int
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
585 x_bitmap_width (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
586 FRAME_PTR f;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
587 int id;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
588 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
589 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].width;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
590 }
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
591
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
592 int
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
593 x_bitmap_pixmap (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
594 FRAME_PTR f;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
595 int id;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
596 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
597 return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
598 }
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
599
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
600
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
601 /* Allocate a new bitmap record. Returns index of new record. */
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
602
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
603 static int
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
604 x_allocate_bitmap_record (f)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
605 FRAME_PTR f;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
606 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
607 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
608 int i;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
609
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
610 if (dpyinfo->bitmaps == NULL)
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
611 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
612 dpyinfo->bitmaps_size = 10;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
613 dpyinfo->bitmaps
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
614 = (struct x_bitmap_record *) xmalloc (dpyinfo->bitmaps_size * sizeof (struct x_bitmap_record));
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
615 dpyinfo->bitmaps_last = 1;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
616 return 1;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
617 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
618
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
619 if (dpyinfo->bitmaps_last < dpyinfo->bitmaps_size)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
620 return ++dpyinfo->bitmaps_last;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
621
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
622 for (i = 0; i < dpyinfo->bitmaps_size; ++i)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
623 if (dpyinfo->bitmaps[i].refcount == 0)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
624 return i + 1;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
625
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
626 dpyinfo->bitmaps_size *= 2;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
627 dpyinfo->bitmaps
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
628 = (struct x_bitmap_record *) xrealloc (dpyinfo->bitmaps,
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
629 dpyinfo->bitmaps_size * sizeof (struct x_bitmap_record));
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
630 return ++dpyinfo->bitmaps_last;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
631 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
632
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
633 /* Add one reference to the reference count of the bitmap with id ID. */
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
634
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
635 void
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
636 x_reference_bitmap (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
637 FRAME_PTR f;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
638 int id;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
639 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
640 ++FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].refcount;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
641 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
642
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
643 /* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
644
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
645 int
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
646 x_create_bitmap_from_data (f, bits, width, height)
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
647 struct frame *f;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
648 char *bits;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
649 unsigned int width, height;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
650 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
651 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
652 Pixmap bitmap;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
653 int id;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
654
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
655 bitmap = XCreateBitmapFromData (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
656 bits, width, height);
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
657
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
658 if (! bitmap)
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
659 return -1;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
660
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
661 id = x_allocate_bitmap_record (f);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
662 dpyinfo->bitmaps[id - 1].pixmap = bitmap;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
663 dpyinfo->bitmaps[id - 1].file = NULL;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
664 dpyinfo->bitmaps[id - 1].refcount = 1;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
665 dpyinfo->bitmaps[id - 1].depth = 1;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
666 dpyinfo->bitmaps[id - 1].height = height;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
667 dpyinfo->bitmaps[id - 1].width = width;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
668
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
669 return id;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
670 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
671
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
672 /* Create bitmap from file FILE for frame F. */
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
673
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
674 int
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
675 x_create_bitmap_from_file (f, file)
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
676 struct frame *f;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
677 Lisp_Object file;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
678 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
679 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
680 unsigned int width, height;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
681 Pixmap bitmap;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
682 int xhot, yhot, result, id;
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
683 Lisp_Object found;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
684 int fd;
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
685 char *filename;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
686
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
687 /* Look for an existing bitmap with the same name. */
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
688 for (id = 0; id < dpyinfo->bitmaps_last; ++id)
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
689 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
690 if (dpyinfo->bitmaps[id].refcount
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
691 && dpyinfo->bitmaps[id].file
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
692 && !strcmp (dpyinfo->bitmaps[id].file, (char *) SDATA (file)))
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
693 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
694 ++dpyinfo->bitmaps[id].refcount;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
695 return id + 1;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
696 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
697 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
698
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
699 /* Search bitmap-file-path for the file, if appropriate. */
45009
7a00556be3ce (x_create_bitmap_from_file, x_find_image_file): Update call to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44786
diff changeset
700 fd = openp (Vx_bitmap_file_path, file, Qnil, &found, Qnil);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
701 if (fd < 0)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
702 return -1;
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26032
diff changeset
703 emacs_close (fd);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
704
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
705 filename = (char *) SDATA (found);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
706
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
707 result = XReadBitmapFile (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
708 filename, &width, &height, &bitmap, &xhot, &yhot);
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
709 if (result != BitmapSuccess)
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
710 return -1;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
711
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
712 id = x_allocate_bitmap_record (f);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
713 dpyinfo->bitmaps[id - 1].pixmap = bitmap;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
714 dpyinfo->bitmaps[id - 1].refcount = 1;
20629
69d52f3bdb46 (x_create_bitmap_from_file): Use size_byte on strings.
Richard M. Stallman <rms@gnu.org>
parents: 19825
diff changeset
715 dpyinfo->bitmaps[id - 1].file
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
716 = (char *) xmalloc (SBYTES (file) + 1);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
717 dpyinfo->bitmaps[id - 1].depth = 1;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
718 dpyinfo->bitmaps[id - 1].height = height;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
719 dpyinfo->bitmaps[id - 1].width = width;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
720 strcpy (dpyinfo->bitmaps[id - 1].file, SDATA (file));
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
721
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
722 return id;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
723 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
724
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
725 /* Remove reference to bitmap with id number ID. */
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
726
21536
468585662fa8 (x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents: 21267
diff changeset
727 void
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
728 x_destroy_bitmap (f, id)
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
729 FRAME_PTR f;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
730 int id;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
731 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
732 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
733
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
734 if (id > 0)
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
735 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
736 --dpyinfo->bitmaps[id - 1].refcount;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
737 if (dpyinfo->bitmaps[id - 1].refcount == 0)
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
738 {
12051
f193ce9efe24 (x_destroy_bitmap): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents: 12046
diff changeset
739 BLOCK_INPUT;
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
740 XFreePixmap (FRAME_X_DISPLAY (f), dpyinfo->bitmaps[id - 1].pixmap);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
741 if (dpyinfo->bitmaps[id - 1].file)
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
742 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
743 xfree (dpyinfo->bitmaps[id - 1].file);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
744 dpyinfo->bitmaps[id - 1].file = NULL;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
745 }
12051
f193ce9efe24 (x_destroy_bitmap): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents: 12046
diff changeset
746 UNBLOCK_INPUT;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
747 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
748 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
749 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
750
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
751 /* Free all the bitmaps for the display specified by DPYINFO. */
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
752
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
753 static void
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
754 x_destroy_all_bitmaps (dpyinfo)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
755 struct x_display_info *dpyinfo;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
756 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
757 int i;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
758 for (i = 0; i < dpyinfo->bitmaps_last; i++)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
759 if (dpyinfo->bitmaps[i].refcount > 0)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
760 {
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
761 XFreePixmap (dpyinfo->display, dpyinfo->bitmaps[i].pixmap);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
762 if (dpyinfo->bitmaps[i].file)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
763 xfree (dpyinfo->bitmaps[i].file);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
764 }
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
765 dpyinfo->bitmaps_last = 0;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
766 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
767
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
768 /* Connect the frame-parameter names for X frames
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 to the ways of passing the parameter values to the window system.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 The name of a parameter, as a Lisp symbol,
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
772 has an `x-frame-parameter' property which is an integer in Lisp
14439
201ccc109ce7 (x_frame_parms): Alphabetize.
Richard M. Stallman <rms@gnu.org>
parents: 14381
diff changeset
773 that is an index in this table. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
775 struct x_frame_parm_table
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 char *name;
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
778 void (*setter) P_ ((struct frame *, Lisp_Object, Lisp_Object));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 };
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
781 static Lisp_Object unwind_create_frame P_ ((Lisp_Object));
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
782 static Lisp_Object unwind_create_tip_frame P_ ((Lisp_Object));
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
783 static void x_change_window_heights P_ ((Lisp_Object, int));
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
784 static void x_disable_image P_ ((struct frame *, struct image *));
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
785 void x_set_foreground_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
786 static void x_set_line_spacing P_ ((struct frame *, Lisp_Object, Lisp_Object));
38183
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
787 static void x_set_wait_for_wm P_ ((struct frame *, Lisp_Object, Lisp_Object));
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
788 static void x_set_fullscreen P_ ((struct frame *, Lisp_Object, Lisp_Object));
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
789 void x_set_background_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
790 void x_set_mouse_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
791 void x_set_cursor_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
792 void x_set_border_color P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
793 void x_set_cursor_type P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
794 void x_set_icon_type P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
795 void x_set_icon_name P_ ((struct frame *, Lisp_Object, Lisp_Object));
41722
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
796 static void x_set_fringe_width P_ ((struct frame *, Lisp_Object, Lisp_Object));
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
797 void x_set_font P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
798 void x_set_border_width P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
799 void x_set_internal_border_width P_ ((struct frame *, Lisp_Object,
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
800 Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
801 void x_explicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
802 void x_set_autoraise P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
803 void x_set_autolower P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
804 void x_set_vertical_scroll_bars P_ ((struct frame *, Lisp_Object,
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
805 Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
806 void x_set_visibility P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
807 void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
808 void x_set_scroll_bar_width P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
809 void x_set_title P_ ((struct frame *, Lisp_Object, Lisp_Object));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
810 void x_set_unsplittable P_ ((struct frame *, Lisp_Object, Lisp_Object));
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
811 void x_set_tool_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
812 void x_set_scroll_bar_foreground P_ ((struct frame *, Lisp_Object,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
813 Lisp_Object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
814 void x_set_scroll_bar_background P_ ((struct frame *, Lisp_Object,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
815 Lisp_Object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
816 static Lisp_Object x_default_scroll_bar_color_parameter P_ ((struct frame *,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
817 Lisp_Object,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
818 Lisp_Object,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
819 char *, char *,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
820 int));
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
821 static void x_set_screen_gamma P_ ((struct frame *, Lisp_Object, Lisp_Object));
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
822 static void x_edge_detection P_ ((struct frame *, struct image *, Lisp_Object,
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
823 Lisp_Object));
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
824 static void init_color_table P_ ((void));
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
825 static void free_color_table P_ ((void));
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
826 static unsigned long *colors_in_color_table P_ ((int *n));
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
827 static unsigned long lookup_rgb_color P_ ((struct frame *f, int r, int g, int b));
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
828 static unsigned long lookup_pixel_color P_ ((struct frame *f, unsigned long p));
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
829
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
830
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
832 static struct x_frame_parm_table x_frame_parms[] =
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 {
42123
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
834 {"auto-raise", x_set_autoraise},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
835 {"auto-lower", x_set_autolower},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
836 {"background-color", x_set_background_color},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
837 {"border-color", x_set_border_color},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
838 {"border-width", x_set_border_width},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
839 {"cursor-color", x_set_cursor_color},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
840 {"cursor-type", x_set_cursor_type},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
841 {"font", x_set_font},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
842 {"foreground-color", x_set_foreground_color},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
843 {"icon-name", x_set_icon_name},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
844 {"icon-type", x_set_icon_type},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
845 {"internal-border-width", x_set_internal_border_width},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
846 {"menu-bar-lines", x_set_menu_bar_lines},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
847 {"mouse-color", x_set_mouse_color},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
848 {"name", x_explicitly_set_name},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
849 {"scroll-bar-width", x_set_scroll_bar_width},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
850 {"title", x_set_title},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
851 {"unsplittable", x_set_unsplittable},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
852 {"vertical-scroll-bars", x_set_vertical_scroll_bars},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
853 {"visibility", x_set_visibility},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
854 {"tool-bar-lines", x_set_tool_bar_lines},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
855 {"scroll-bar-foreground", x_set_scroll_bar_foreground},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
856 {"scroll-bar-background", x_set_scroll_bar_background},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
857 {"screen-gamma", x_set_screen_gamma},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
858 {"line-spacing", x_set_line_spacing},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
859 {"left-fringe", x_set_fringe_width},
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
860 {"right-fringe", x_set_fringe_width},
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
861 {"wait-for-wm", x_set_wait_for_wm},
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
862 {"fullscreen", x_set_fullscreen},
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
863
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 };
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
866 /* Attach the `x-frame-parameter' properties to
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 the Lisp symbol names of parameters relevant to X. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868
21846
486ac68ce051 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21779
diff changeset
869 void
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 init_x_parm_symbols ()
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 int i;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
874 for (i = 0; i < sizeof (x_frame_parms) / sizeof (x_frame_parms[0]); i++)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
875 Fput (intern (x_frame_parms[i].name), Qx_frame_parameter,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 make_number (i));
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
879
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
880 /* Really try to move where we want to be in case of fullscreen. Some WMs
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
881 moves the window where we tell them. Some (mwm, twm) moves the outer
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
882 window manager window there instead.
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
883 Try to compensate for those WM here. */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
884 static void
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
885 x_fullscreen_move (f, new_top, new_left)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
886 struct frame *f;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
887 int new_top;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
888 int new_left;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
889 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
890 if (new_top != f->output_data.x->top_pos
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
891 || new_left != f->output_data.x->left_pos)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
892 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
893 int move_x = new_left + f->output_data.x->x_pixels_outer_diff;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
894 int move_y = new_top + f->output_data.x->y_pixels_outer_diff;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
895
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
896 f->output_data.x->want_fullscreen |= FULLSCREEN_MOVE_WAIT;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
897 x_set_offset (f, move_x, move_y, 1);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
898 }
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
899 }
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
900
19095
2f58824bf3f6 (x_set_frame_parameters): Heading comment fixed.
Kenichi Handa <handa@m17n.org>
parents: 19026
diff changeset
901 /* Change the parameters of frame F as specified by ALIST.
29617
14aa31254532 (x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents: 29434
diff changeset
902 If a parameter is not specially recognized, do nothing special;
14aa31254532 (x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents: 29434
diff changeset
903 otherwise call the `x_set_...' function for that parameter.
14aa31254532 (x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents: 29434
diff changeset
904 Except for certain geometry properties, always call store_frame_param
14aa31254532 (x_set_frame_parameters): Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents: 29434
diff changeset
905 to store the new value in the parameter alist. */
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
906
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
907 void
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
908 x_set_frame_parameters (f, alist)
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
909 FRAME_PTR f;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
910 Lisp_Object alist;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
911 {
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
912 Lisp_Object tail;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
913
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
914 /* If both of these parameters are present, it's more efficient to
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
915 set them both at once. So we wait until we've looked at the
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
916 entire list before we set them. */
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
917 int width, height;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
918
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
919 /* Same here. */
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
920 Lisp_Object left, top;
3203
1055aa1b7547 * xfns.c (x_set_frame_parameters): Use the first
Jim Blandy <jimb@redhat.com>
parents: 3173
diff changeset
921
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
922 /* Same with these. */
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
923 Lisp_Object icon_left, icon_top;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
924
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
925 /* Record in these vectors all the parms specified. */
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
926 Lisp_Object *parms;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
927 Lisp_Object *values;
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
928 int i, p;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
929 int left_no_change = 0, top_no_change = 0;
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
930 int icon_left_no_change = 0, icon_top_no_change = 0;
42883
57c5f7f05f4c xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
Jan Djärv <jan.h.d@swipnet.se>
parents: 42721
diff changeset
931 int fullscreen_is_being_set = 0;
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
932
24170
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
933 struct gcpro gcpro1, gcpro2;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
934
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
935 i = 0;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
936 for (tail = alist; CONSP (tail); tail = Fcdr (tail))
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
937 i++;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
938
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
939 parms = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
940 values = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
941
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
942 /* Extract parm names and values into those vectors. */
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
943
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
944 i = 0;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
945 for (tail = alist; CONSP (tail); tail = Fcdr (tail))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
946 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
947 Lisp_Object elt;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
948
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
949 elt = Fcar (tail);
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
950 parms[i] = Fcar (elt);
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
951 values[i] = Fcdr (elt);
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
952 i++;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
953 }
24170
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
954 /* TAIL and ALIST are not used again below here. */
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
955 alist = tail = Qnil;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
956
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
957 GCPRO2 (*parms, *values);
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
958 gcpro1.nvars = i;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
959 gcpro2.nvars = i;
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
960
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
961 /* There is no need to gcpro LEFT, TOP, ICON_LEFT, or ICON_TOP,
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
962 because their values appear in VALUES and strings are not valid. */
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
963 top = left = Qunbound;
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
964 icon_left = icon_top = Qunbound;
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
965
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
966 /* Provide default values for HEIGHT and WIDTH. */
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
967 if (FRAME_NEW_WIDTH (f))
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
968 width = FRAME_NEW_WIDTH (f);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
969 else
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
970 width = FRAME_WIDTH (f);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
971
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
972 if (FRAME_NEW_HEIGHT (f))
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
973 height = FRAME_NEW_HEIGHT (f);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
974 else
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
975 height = FRAME_HEIGHT (f);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
976
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
977 /* Process foreground_color and background_color before anything else.
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
978 They are independent of other properties, but other properties (e.g.,
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
979 cursor_color) are dependent upon them. */
41722
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
980 /* Process default font as well, since fringe widths depends on it. */
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
981 /* Also, process fullscreen, width and height depend upon that */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
982 for (p = 0; p < i; p++)
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
983 {
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
984 Lisp_Object prop, val;
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
985
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
986 prop = parms[p];
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
987 val = values[p];
41722
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
988 if (EQ (prop, Qforeground_color)
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
989 || EQ (prop, Qbackground_color)
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
990 || EQ (prop, Qfont)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
991 || EQ (prop, Qfullscreen))
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
992 {
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
993 register Lisp_Object param_index, old_value;
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
994
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
995 old_value = get_frame_param (f, prop);
42894
b9c592cee6ec xfns.c (x_set_frame_parameters): Typo in previous fix corrected.
Jan Djärv <jan.h.d@swipnet.se>
parents: 42883
diff changeset
996 fullscreen_is_being_set |= EQ (prop, Qfullscreen);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
997
40802
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
998 if (NILP (Fequal (val, old_value)))
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
999 {
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1000 store_frame_param (f, prop, val);
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1001
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1002 param_index = Fget (prop, Qx_frame_parameter);
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1003 if (NATNUMP (param_index)
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1004 && (XFASTINT (param_index)
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1005 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0])))
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1006 (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value);
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1007 }
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
1008 }
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
1009 }
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
1010
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1011 /* Now process them in reverse of specified order. */
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1012 for (i--; i >= 0; i--)
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1013 {
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1014 Lisp_Object prop, val;
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1015
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1016 prop = parms[i];
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1017 val = values[i];
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1018
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1019 if (EQ (prop, Qwidth) && NUMBERP (val))
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1020 width = XFASTINT (val);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1021 else if (EQ (prop, Qheight) && NUMBERP (val))
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1022 height = XFASTINT (val);
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1023 else if (EQ (prop, Qtop))
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1024 top = val;
3447
ed2a17aac4cd (x_set_frame_parameters): Process all parms in reverse order.
Richard M. Stallman <rms@gnu.org>
parents: 3446
diff changeset
1025 else if (EQ (prop, Qleft))
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1026 left = val;
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1027 else if (EQ (prop, Qicon_top))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1028 icon_top = val;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1029 else if (EQ (prop, Qicon_left))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1030 icon_left = val;
41722
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
1031 else if (EQ (prop, Qforeground_color)
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
1032 || EQ (prop, Qbackground_color)
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1033 || EQ (prop, Qfont)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1034 || EQ (prop, Qfullscreen))
25289
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
1035 /* Processed above. */
64b742df49ca (x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents: 25200
diff changeset
1036 continue;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1037 else
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1038 {
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
1039 register Lisp_Object param_index, old_value;
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
1040
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
1041 old_value = get_frame_param (f, prop);
40802
82e6baf4446f (x_set_frame_parameters): Avoid infinite recursion.
Miles Bader <miles@gnu.org>
parents: 40715
diff changeset
1042
41089
ead122ed3fe6 (x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents: 41087
diff changeset
1043 store_frame_param (f, prop, val);
ead122ed3fe6 (x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents: 41087
diff changeset
1044
ead122ed3fe6 (x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents: 41087
diff changeset
1045 param_index = Fget (prop, Qx_frame_parameter);
ead122ed3fe6 (x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents: 41087
diff changeset
1046 if (NATNUMP (param_index)
ead122ed3fe6 (x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents: 41087
diff changeset
1047 && (XFASTINT (param_index)
ead122ed3fe6 (x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents: 41087
diff changeset
1048 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0])))
ead122ed3fe6 (x_set_frame_parameters): Revert change of 2001-11-07.
Gerd Moellmann <gerd@gnu.org>
parents: 41087
diff changeset
1049 (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1050 }
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1051 }
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1052
4617
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
1053 /* Don't die if just one of these was set. */
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
1054 if (EQ (left, Qunbound))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1055 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1056 left_no_change = 1;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1057 if (f->output_data.x->left_pos < 0)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1058 left = Fcons (Qplus, Fcons (make_number (f->output_data.x->left_pos), Qnil));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1059 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1060 XSETINT (left, f->output_data.x->left_pos);
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1061 }
4617
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
1062 if (EQ (top, Qunbound))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1063 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1064 top_no_change = 1;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1065 if (f->output_data.x->top_pos < 0)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1066 top = Fcons (Qplus, Fcons (make_number (f->output_data.x->top_pos), Qnil));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1067 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1068 XSETINT (top, f->output_data.x->top_pos);
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1069 }
4617
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
1070
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1071 /* If one of the icon positions was not set, preserve or default it. */
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1072 if (EQ (icon_left, Qunbound) || ! INTEGERP (icon_left))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1073 {
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1074 icon_left_no_change = 1;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1075 icon_left = Fcdr (Fassq (Qicon_left, f->param_alist));
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1076 if (NILP (icon_left))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1077 XSETINT (icon_left, 0);
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1078 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1079 if (EQ (icon_top, Qunbound) || ! INTEGERP (icon_top))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1080 {
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1081 icon_top_no_change = 1;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1082 icon_top = Fcdr (Fassq (Qicon_top, f->param_alist));
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1083 if (NILP (icon_top))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1084 XSETINT (icon_top, 0);
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1085 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1086
42883
57c5f7f05f4c xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
Jan Djärv <jan.h.d@swipnet.se>
parents: 42721
diff changeset
1087 if (FRAME_VISIBLE_P (f) && fullscreen_is_being_set)
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1088 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1089 /* If the frame is visible already and the fullscreen parameter is
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1090 being set, it is too late to set WM manager hints to specify
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1091 size and position.
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1092 Here we first get the width, height and position that applies to
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1093 fullscreen. We then move the frame to the appropriate
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1094 position. Resize of the frame is taken care of in the code after
42883
57c5f7f05f4c xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
Jan Djärv <jan.h.d@swipnet.se>
parents: 42721
diff changeset
1095 this if-statement. */
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1096 int new_left, new_top;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1097
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1098 x_fullscreen_adjust (f, &width, &height, &new_top, &new_left);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1099 x_fullscreen_move (f, new_top, new_left);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1100 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1101
11932
f3fb1e5dfde1 (x_set_frame_parameters) Fix typo.
Karl Heuer <kwzh@gnu.org>
parents: 11917
diff changeset
1102 /* Don't set these parameters unless they've been explicitly
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1103 specified. The window might be mapped or resized while we're in
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1104 this function, and we don't want to override that unless the lisp
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1105 code has asked for it.
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1106
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1107 Don't set these parameters unless they actually differ from the
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1108 window's current parameters; the window may not actually exist
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
1109 yet. */
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1110 {
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1111 Lisp_Object frame;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1112
5107
2a019dd8ed51 (x_set_frame_parameters): Call check_frame_size
Richard M. Stallman <rms@gnu.org>
parents: 4771
diff changeset
1113 check_frame_size (f, &height, &width);
2a019dd8ed51 (x_set_frame_parameters): Call check_frame_size
Richard M. Stallman <rms@gnu.org>
parents: 4771
diff changeset
1114
9285
75f1c0d90b3d (x_set_frame_parameters, x_set_visibility, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9240
diff changeset
1115 XSETFRAME (frame, f);
4617
807ba8bcc309 (x_set_frame_parameters): Don't die if just one of
Richard M. Stallman <rms@gnu.org>
parents: 4606
diff changeset
1116
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1117 if (width != FRAME_WIDTH (f)
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1118 || height != FRAME_HEIGHT (f)
14965
685888f786d3 (x_set_frame_parameters): Do call Fset_frame_size
Richard M. Stallman <rms@gnu.org>
parents: 14831
diff changeset
1119 || FRAME_NEW_HEIGHT (f) || FRAME_NEW_WIDTH (f))
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1120 Fset_frame_size (frame, make_number (width), make_number (height));
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1121
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1122 if ((!NILP (left) || !NILP (top))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1123 && ! (left_no_change && top_no_change)
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1124 && ! (NUMBERP (left) && XINT (left) == f->output_data.x->left_pos
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1125 && NUMBERP (top) && XINT (top) == f->output_data.x->top_pos))
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1126 {
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1127 int leftpos = 0;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1128 int toppos = 0;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1129
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1130 /* Record the signs. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1131 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative);
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1132 if (EQ (left, Qminus))
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1133 f->output_data.x->size_hint_flags |= XNegative;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1134 else if (INTEGERP (left))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1135 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1136 leftpos = XINT (left);
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1137 if (leftpos < 0)
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1138 f->output_data.x->size_hint_flags |= XNegative;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1139 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1140 else if (CONSP (left) && EQ (XCAR (left), Qminus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1141 && CONSP (XCDR (left))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1142 && INTEGERP (XCAR (XCDR (left))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1143 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1144 leftpos = - XINT (XCAR (XCDR (left)));
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1145 f->output_data.x->size_hint_flags |= XNegative;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1146 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1147 else if (CONSP (left) && EQ (XCAR (left), Qplus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1148 && CONSP (XCDR (left))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1149 && INTEGERP (XCAR (XCDR (left))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1150 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1151 leftpos = XINT (XCAR (XCDR (left)));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1152 }
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1153
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1154 if (EQ (top, Qminus))
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1155 f->output_data.x->size_hint_flags |= YNegative;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1156 else if (INTEGERP (top))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1157 {
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1158 toppos = XINT (top);
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1159 if (toppos < 0)
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1160 f->output_data.x->size_hint_flags |= YNegative;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1161 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1162 else if (CONSP (top) && EQ (XCAR (top), Qminus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1163 && CONSP (XCDR (top))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1164 && INTEGERP (XCAR (XCDR (top))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1165 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1166 toppos = - XINT (XCAR (XCDR (top)));
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1167 f->output_data.x->size_hint_flags |= YNegative;
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1168 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1169 else if (CONSP (top) && EQ (XCAR (top), Qplus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1170 && CONSP (XCDR (top))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1171 && INTEGERP (XCAR (XCDR (top))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1172 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1173 toppos = XINT (XCAR (XCDR (top)));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1174 }
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
1175
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1176
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1177 /* Store the numeric value of the position. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1178 f->output_data.x->top_pos = toppos;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1179 f->output_data.x->left_pos = leftpos;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1180
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1181 f->output_data.x->win_gravity = NorthWestGravity;
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1182
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1183 /* Actually set that position, and convert to absolute. */
11989
0deb4505c0f0 (x_set_frame_parameters): Pass -1 to x_set_offset.
Karl Heuer <kwzh@gnu.org>
parents: 11986
diff changeset
1184 x_set_offset (f, leftpos, toppos, -1);
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
1185 }
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1186
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1187 if ((!NILP (icon_left) || !NILP (icon_top))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1188 && ! (icon_left_no_change && icon_top_no_change))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
1189 x_wm_set_icon_position (f, XINT (icon_left), XINT (icon_top));
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1190 }
24170
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
1191
3689490f7f65 (x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents: 23793
diff changeset
1192 UNGCPRO;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1193 }
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1194
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1195 /* Store the screen positions of frame F into XPTR and YPTR.
7408
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1196 These are the positions of the containing window manager window,
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1197 not Emacs's own window. */
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1198
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1199 void
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1200 x_real_positions (f, xptr, yptr)
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1201 FRAME_PTR f;
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1202 int *xptr, *yptr;
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1203 {
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1204 int win_x, win_y, outer_x, outer_y;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1205 int real_x = 0, real_y = 0;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1206 int had_errors = 0;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1207 Window win = f->output_data.x->parent_desc;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1208
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1209 int count;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1210
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1211 BLOCK_INPUT;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1212
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1213 count = x_catch_errors (FRAME_X_DISPLAY (f));
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1214
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1215 if (win == FRAME_X_DISPLAY_INFO (f)->root_window)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1216 win = FRAME_OUTER_WINDOW (f);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1217
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1218 /* This loop traverses up the containment tree until we hit the root
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1219 window. Window managers may intersect many windows between our window
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1220 and the root window. The window we find just before the root window
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1221 should be the outer WM window. */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1222 for (;;)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1223 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1224 Window wm_window, rootw;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1225 Window *tmp_children;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1226 unsigned int tmp_nchildren;
43914
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1227 int success;
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1228
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1229 success = XQueryTree (FRAME_X_DISPLAY (f), win, &rootw,
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1230 &wm_window, &tmp_children, &tmp_nchildren);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1231
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1232 had_errors = x_had_errors_p (FRAME_X_DISPLAY (f));
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1233
43914
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1234 /* Don't free tmp_children if XQueryTree failed. */
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1235 if (! success)
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1236 break;
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1237
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1238 XFree ((char *) tmp_children);
fed15ed090bc (x_real_positions): Handle failure in XQueryTree.
Richard M. Stallman <rms@gnu.org>
parents: 43670
diff changeset
1239
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1240 if (wm_window == rootw || had_errors)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1241 break;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1242
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1243 win = wm_window;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1244 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1245
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1246 if (! had_errors)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1247 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1248 int ign;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1249 Window child, rootw;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1250
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1251 /* Get the real coordinates for the WM window upper left corner */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1252 XGetGeometry (FRAME_X_DISPLAY (f), win,
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1253 &rootw, &real_x, &real_y, &ign, &ign, &ign, &ign);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1254
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1255 /* Translate real coordinates to coordinates relative to our
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1256 window. For our window, the upper left corner is 0, 0.
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1257 Since the upper left corner of the WM window is outside
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1258 our window, win_x and win_y will be negative:
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1259
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1260 ------------------ ---> x
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1261 | title |
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1262 | ----------------- v y
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1263 | | our window
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1264 */
17954
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1265 XTranslateCoordinates (FRAME_X_DISPLAY (f),
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1266
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1267 /* From-window, to-window. */
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1268 FRAME_X_DISPLAY_INFO (f)->root_window,
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1269 FRAME_X_WINDOW (f),
17954
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1270
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1271 /* From-position, to-position. */
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1272 real_x, real_y, &win_x, &win_y,
17954
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1273
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1274 /* Child of win. */
7c919d7f8217 (x_real_positions): Directly compare the frame's window
Richard M. Stallman <rms@gnu.org>
parents: 17836
diff changeset
1275 &child);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
1276
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1277 if (FRAME_X_WINDOW (f) == FRAME_OUTER_WINDOW (f))
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1278 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1279 outer_x = win_x;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1280 outer_y = win_y;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1281 }
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1282 else
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1283 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1284 XTranslateCoordinates (FRAME_X_DISPLAY (f),
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1285
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1286 /* From-window, to-window. */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1287 FRAME_X_DISPLAY_INFO (f)->root_window,
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1288 FRAME_OUTER_WINDOW (f),
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1289
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1290 /* From-position, to-position. */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1291 real_x, real_y, &outer_x, &outer_y,
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1292
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1293 /* Child of win. */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1294 &child);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1295 }
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1296
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1297 had_errors = x_had_errors_p (FRAME_X_DISPLAY (f));
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1298 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1299
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1300 x_uncatch_errors (FRAME_X_DISPLAY (f), count);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1301
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1302 UNBLOCK_INPUT;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1303
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1304 if (had_errors) return;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1305
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1306 f->output_data.x->x_pixels_diff = -win_x;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1307 f->output_data.x->y_pixels_diff = -win_y;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1308 f->output_data.x->x_pixels_outer_diff = -outer_x;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1309 f->output_data.x->y_pixels_outer_diff = -outer_y;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1310
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1311 *xptr = real_x;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1312 *yptr = real_y;
7408
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1313 }
65c133b66371 (x_real_positions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7308
diff changeset
1314
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1315 /* Insert a description of internally-recorded parameters of frame X
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 into the parameter alist *ALISTPTR that is to be given to the user.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 Only parameters that are specific to the X window system
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1318 and whose values are not correctly recorded in the frame's
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 param_alist need to be considered here. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320
21536
468585662fa8 (x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents: 21267
diff changeset
1321 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1322 x_report_frame_params (f, alistptr)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1323 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 Lisp_Object *alistptr;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 char buf[16];
11986
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1327 Lisp_Object tem;
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1328
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1329 /* Represent negative positions (off the top or left screen edge)
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1330 in a way that Fmodify_frame_parameters will understand correctly. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1331 XSETINT (tem, f->output_data.x->left_pos);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1332 if (f->output_data.x->left_pos >= 0)
11986
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1333 store_in_alist (alistptr, Qleft, tem);
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1334 else
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1335 store_in_alist (alistptr, Qleft, Fcons (Qplus, Fcons (tem, Qnil)));
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1336
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1337 XSETINT (tem, f->output_data.x->top_pos);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1338 if (f->output_data.x->top_pos >= 0)
11986
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1339 store_in_alist (alistptr, Qtop, tem);
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1340 else
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1341 store_in_alist (alistptr, Qtop, Fcons (Qplus, Fcons (tem, Qnil)));
bfdf35b8c34b (x_report_frame_params): Report top and left
Karl Heuer <kwzh@gnu.org>
parents: 11962
diff changeset
1342
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1343 store_in_alist (alistptr, Qborder_width,
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1344 make_number (f->output_data.x->border_width));
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1345 store_in_alist (alistptr, Qinternal_border_width,
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1346 make_number (f->output_data.x->internal_border_width));
41833
ad13493331f7 (x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents: 41722
diff changeset
1347 store_in_alist (alistptr, Qleft_fringe,
ad13493331f7 (x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents: 41722
diff changeset
1348 make_number (f->output_data.x->left_fringe_width));
ad13493331f7 (x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents: 41722
diff changeset
1349 store_in_alist (alistptr, Qright_fringe,
ad13493331f7 (x_report_frame_params): Make the scroll-bar-width frame parameter have a numeric value
Kim F. Storm <storm@cua.dk>
parents: 41722
diff changeset
1350 make_number (f->output_data.x->right_fringe_width));
42006
06231786ed81 (Frame_parameters): Makes the scroll-bar-width frame parameter have
Eli Zaretskii <eliz@gnu.org>
parents: 41833
diff changeset
1351 store_in_alist (alistptr, Qscroll_bar_width,
47429
49c23a6bf79f (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
Richard M. Stallman <rms@gnu.org>
parents: 47189
diff changeset
1352 (! FRAME_HAS_VERTICAL_SCROLL_BARS (f)
49c23a6bf79f (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
Richard M. Stallman <rms@gnu.org>
parents: 47189
diff changeset
1353 ? make_number (0)
49c23a6bf79f (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
Richard M. Stallman <rms@gnu.org>
parents: 47189
diff changeset
1354 : FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0
49c23a6bf79f (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
Richard M. Stallman <rms@gnu.org>
parents: 47189
diff changeset
1355 ? make_number (FRAME_SCROLL_BAR_PIXEL_WIDTH (f))
49c23a6bf79f (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
Richard M. Stallman <rms@gnu.org>
parents: 47189
diff changeset
1356 /* nil means "use default width"
47434
3891c4b6162f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 47429
diff changeset
1357 for non-toolkit scroll bar.
3891c4b6162f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 47429
diff changeset
1358 ruler-mode.el depends on this. */
47429
49c23a6bf79f (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
Richard M. Stallman <rms@gnu.org>
parents: 47189
diff changeset
1359 : Qnil));
9182
516fdeee89d6 (x_report_frame_params): Fix format/arg mismatch.
Karl Heuer <kwzh@gnu.org>
parents: 9166
diff changeset
1360 sprintf (buf, "%ld", (long) FRAME_X_WINDOW (f));
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1361 store_in_alist (alistptr, Qwindow_id,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 build_string (buf));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1363 #ifdef USE_X_TOOLKIT
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1364 /* Tooltip frame may not have this widget. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1365 if (f->output_data.x->widget)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1366 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1367 sprintf (buf, "%ld", (long) FRAME_OUTER_WINDOW (f));
23793
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
1368 store_in_alist (alistptr, Qouter_window_id,
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
1369 build_string (buf));
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
1370 store_in_alist (alistptr, Qicon_name, f->icon_name);
6522
eecaa7b19b6c (x_report_frame_params): Sample visibility.
Karl Heuer <kwzh@gnu.org>
parents: 6519
diff changeset
1371 FRAME_SAMPLE_VISIBILITY (f);
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1372 store_in_alist (alistptr, Qvisibility,
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1373 (FRAME_VISIBLE_P (f) ? Qt
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
1374 : FRAME_ICONIFIED_P (f) ? Qicon : Qnil));
11483
089f81a81ba6 (x_report_frame_params): Report value of `display' parm.
Richard M. Stallman <rms@gnu.org>
parents: 11417
diff changeset
1375 store_in_alist (alistptr, Qdisplay,
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1376 XCAR (FRAME_X_DISPLAY_INFO (f)->name_list_element));
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
1377
18612
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1378 if (f->output_data.x->parent_desc == FRAME_X_DISPLAY_INFO (f)->root_window)
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1379 tem = Qnil;
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1380 else
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1381 XSETFASTINT (tem, f->output_data.x->parent_desc);
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
1382 store_in_alist (alistptr, Qparent_id, tem);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384
10920
bb3f9aaf0e46 (defined_color): If colormap is full, find closest match.
Richard M. Stallman <rms@gnu.org>
parents: 10742
diff changeset
1385
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1386
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1387 /* Gamma-correct COLOR on frame F. */
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1388
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1389 void
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1390 gamma_correct (f, color)
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1391 struct frame *f;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1392 XColor *color;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1393 {
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1394 if (f->gamma)
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1395 {
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1396 color->red = pow (color->red / 65535.0, f->gamma) * 65535.0 + 0.5;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1397 color->green = pow (color->green / 65535.0, f->gamma) * 65535.0 + 0.5;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1398 color->blue = pow (color->blue / 65535.0, f->gamma) * 65535.0 + 0.5;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1399 }
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1400 }
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1401
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1402
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1403 /* Decide if color named COLOR_NAME is valid for use on frame F. If
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1404 so, return the RGB values in COLOR. If ALLOC_P is non-zero,
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1405 allocate the color. Value is zero if COLOR_NAME is invalid, or
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1406 no color could be allocated. */
8675
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
1407
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 int
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1409 x_defined_color (f, color_name, color, alloc_p)
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1410 struct frame *f;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1411 char *color_name;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1412 XColor *color;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1413 int alloc_p;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1414 {
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1415 int success_p;
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1416 Display *dpy = FRAME_X_DISPLAY (f);
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1417 Colormap cmap = FRAME_X_COLORMAP (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419 BLOCK_INPUT;
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1420 success_p = XParseColor (dpy, cmap, color_name, color);
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1421 if (success_p && alloc_p)
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1422 success_p = x_alloc_nearest_color (f, cmap, color);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424
28096
244f283b3d03 (x_defined_color): Rewritten to use x_allocate_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 28050
diff changeset
1425 return success_p;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1428
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1429 /* Return the pixel color value for color COLOR_NAME on frame F. If F
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1430 is a monochrome frame, return MONO_COLOR regardless of what ARG says.
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1431 Signal an error if color can't be allocated. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 int
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1434 x_decode_color (f, color_name, mono_color)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1435 FRAME_PTR f;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1436 Lisp_Object color_name;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1437 int mono_color;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1439 XColor cdef;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1441 CHECK_STRING (color_name);
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1442
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1443 #if 0 /* Don't do this. It's wrong when we're not using the default
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1444 colormap, it makes freeing difficult, and it's probably not
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1445 an important optimization. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1446 if (strcmp (SDATA (color_name), "black") == 0)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1447 return BLACK_PIX_DEFAULT (f);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1448 else if (strcmp (SDATA (color_name), "white") == 0)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1449 return WHITE_PIX_DEFAULT (f);
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1450 #endif
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1451
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1452 /* Return MONO_COLOR for monochrome frames. */
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1453 if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1)
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1454 return mono_color;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
1456 /* x_defined_color is responsible for coping with failures
11060
0a7048d331e6 (x_decode_color): Don't use cdef if defined_color failed.
Richard M. Stallman <rms@gnu.org>
parents: 11014
diff changeset
1457 by looking for a near-miss. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1458 if (x_defined_color (f, SDATA (color_name), &cdef, 1))
11060
0a7048d331e6 (x_decode_color): Don't use cdef if defined_color failed.
Richard M. Stallman <rms@gnu.org>
parents: 11014
diff changeset
1459 return cdef.pixel;
0a7048d331e6 (x_decode_color): Don't use cdef if defined_color failed.
Richard M. Stallman <rms@gnu.org>
parents: 11014
diff changeset
1460
31902
f526f6f002d7 (x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents: 31824
diff changeset
1461 Fsignal (Qerror, Fcons (build_string ("Undefined color"),
f526f6f002d7 (x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents: 31824
diff changeset
1462 Fcons (color_name, Qnil)));
f526f6f002d7 (x_decode_color): Don't return a Lisp_Object.
Gerd Moellmann <gerd@gnu.org>
parents: 31824
diff changeset
1463 return 0;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1464 }
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1465
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
1466
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1468 /* Change the `line-spacing' frame parameter of frame F. OLD_VALUE is
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1469 the previous value of that parameter, NEW_VALUE is the new value. */
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1470
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1471 static void
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1472 x_set_line_spacing (f, new_value, old_value)
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1473 struct frame *f;
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1474 Lisp_Object new_value, old_value;
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1475 {
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1476 if (NILP (new_value))
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1477 f->extra_line_spacing = 0;
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1478 else if (NATNUMP (new_value))
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1479 f->extra_line_spacing = XFASTINT (new_value);
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1480 else
30601
7c995a54a0e8 Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents: 30573
diff changeset
1481 Fsignal (Qerror, Fcons (build_string ("Invalid line-spacing"),
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1482 Fcons (new_value, Qnil)));
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1483 if (FRAME_VISIBLE_P (f))
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1484 redraw_frame (f);
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1485 }
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1486
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
1487
38183
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1488 /* Change the `wait-for-wm' frame parameter of frame F. OLD_VALUE is
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1489 the previous value of that parameter, NEW_VALUE is the new value.
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1490 See also the comment of wait_for_wm in struct x_output. */
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1491
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1492 static void
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1493 x_set_wait_for_wm (f, new_value, old_value)
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1494 struct frame *f;
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1495 Lisp_Object new_value, old_value;
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1496 {
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1497 f->output_data.x->wait_for_wm = !NILP (new_value);
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1498 }
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1499
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1500
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1501 /* Change the `fullscreen' frame parameter of frame F. OLD_VALUE is
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1502 the previous value of that parameter, NEW_VALUE is the new value. */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1503
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1504 static void
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1505 x_set_fullscreen (f, new_value, old_value)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1506 struct frame *f;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1507 Lisp_Object new_value, old_value;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1508 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1509 if (NILP (new_value))
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1510 f->output_data.x->want_fullscreen = FULLSCREEN_NONE;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1511 else if (EQ (new_value, Qfullboth))
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1512 f->output_data.x->want_fullscreen = FULLSCREEN_BOTH;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1513 else if (EQ (new_value, Qfullwidth))
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1514 f->output_data.x->want_fullscreen = FULLSCREEN_WIDTH;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1515 else if (EQ (new_value, Qfullheight))
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1516 f->output_data.x->want_fullscreen = FULLSCREEN_HEIGHT;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1517 }
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1518
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
1519
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1520 /* Change the `screen-gamma' frame parameter of frame F. OLD_VALUE is
38183
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1521 the previous value of that parameter, NEW_VALUE is the new
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
1522 value. */
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1523
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1524 static void
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1525 x_set_screen_gamma (f, new_value, old_value)
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1526 struct frame *f;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1527 Lisp_Object new_value, old_value;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1528 {
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1529 if (NILP (new_value))
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1530 f->gamma = 0;
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1531 else if (NUMBERP (new_value) && XFLOATINT (new_value) > 0)
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1532 /* The value 0.4545 is the normal viewing gamma. */
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1533 f->gamma = 1.0 / (0.4545 * XFLOATINT (new_value));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1534 else
30601
7c995a54a0e8 Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents: 30573
diff changeset
1535 Fsignal (Qerror, Fcons (build_string ("Invalid screen-gamma"),
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1536 Fcons (new_value, Qnil)));
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1537
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1538 clear_face_cache (0);
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1539 }
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1540
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
1541
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1542 /* Functions called only from `x_set_frame_param'
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 to set individual parameters.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1545 If FRAME_X_WINDOW (f) is 0,
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1546 the frame is being created and its X-window does not exist yet.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 In that case, just record the parameter's new value
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 in the standard place; do not attempt to change the window. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1551 x_set_foreground_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1552 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554 {
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1555 struct x_output *x = f->output_data.x;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1556 unsigned long fg, old_fg;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1557
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1558 fg = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1559 old_fg = x->foreground_pixel;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1560 x->foreground_pixel = fg;
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1561
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1562 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563 {
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1564 Display *dpy = FRAME_X_DISPLAY (f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1565
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1566 BLOCK_INPUT;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1567 XSetForeground (dpy, x->normal_gc, fg);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1568 XSetBackground (dpy, x->reverse_gc, fg);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1569
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1570 if (x->cursor_pixel == old_fg)
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1571 {
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1572 unload_color (f, x->cursor_pixel);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1573 x->cursor_pixel = x_copy_color (f, fg);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1574 XSetBackground (dpy, x->cursor_gc, x->cursor_pixel);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1575 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1576
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 UNBLOCK_INPUT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1578
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1579 update_face_from_frame_parameter (f, Qforeground_color, arg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1580
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1581 if (FRAME_VISIBLE_P (f))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1582 redraw_frame (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1584
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1585 unload_color (f, old_fg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1589 x_set_background_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1590 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 {
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1593 struct x_output *x = f->output_data.x;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1594 unsigned long bg;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1595
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1596 bg = x_decode_color (f, arg, WHITE_PIX_DEFAULT (f));
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1597 unload_color (f, x->background_pixel);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1598 x->background_pixel = bg;
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1599
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1600 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 {
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1602 Display *dpy = FRAME_X_DISPLAY (f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1603
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1604 BLOCK_INPUT;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1605 XSetBackground (dpy, x->normal_gc, bg);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1606 XSetForeground (dpy, x->reverse_gc, bg);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1607 XSetWindowBackground (dpy, FRAME_X_WINDOW (f), bg);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1608 XSetForeground (dpy, x->cursor_gc, bg);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1609
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1610 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1611 xg_set_background_color (f, bg);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1612 #endif
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1613
39159
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1614 #ifndef USE_TOOLKIT_SCROLL_BARS /* Turns out to be annoying with
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1615 toolkit scroll bars. */
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1616 {
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1617 Lisp_Object bar;
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1618 for (bar = FRAME_SCROLL_BARS (f);
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1619 !NILP (bar);
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1620 bar = XSCROLL_BAR (bar)->next)
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1621 {
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1622 Window window = SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar));
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1623 XSetWindowBackground (dpy, window, bg);
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1624 }
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1625 }
2c7a6a1b047e (x_set_background_color): Don't change the colors
Gerd Moellmann <gerd@gnu.org>
parents: 38749
diff changeset
1626 #endif /* USE_TOOLKIT_SCROLL_BARS */
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1627
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 UNBLOCK_INPUT;
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1629 update_face_from_frame_parameter (f, Qbackground_color, arg);
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
1630
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1631 if (FRAME_VISIBLE_P (f))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1632 redraw_frame (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1637 x_set_mouse_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1638 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 {
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1641 struct x_output *x = f->output_data.x;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1642 Display *dpy = FRAME_X_DISPLAY (f);
6759
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
1643 Cursor cursor, nontext_cursor, mode_cursor, cross_cursor;
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
1644 Cursor hourglass_cursor, horizontal_drag_cursor;
17609
8c878d76d6a4 (x_real_positions, x_set_mouse_color, Fx_list_fonts):
Richard M. Stallman <rms@gnu.org>
parents: 17579
diff changeset
1645 int count;
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1646 unsigned long pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1647 unsigned long mask_color = x->background_pixel;
25075
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1648
9f5d679349e9 (x_set_mouse_color): Always unload the old color.
Karl Heuer <kwzh@gnu.org>
parents: 24994
diff changeset
1649 /* Don't let pointers be invisible. */
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1650 if (mask_color == pixel)
35261
ba1f849f9381 (x_set_mouse_color): Fix color allocation.
Gerd Moellmann <gerd@gnu.org>
parents: 35191
diff changeset
1651 {
ba1f849f9381 (x_set_mouse_color): Fix color allocation.
Gerd Moellmann <gerd@gnu.org>
parents: 35191
diff changeset
1652 x_free_colors (f, &pixel, 1);
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1653 pixel = x_copy_color (f, x->foreground_pixel);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1654 }
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1655
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1656 unload_color (f, x->mouse_pixel);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1657 x->mouse_pixel = pixel;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 BLOCK_INPUT;
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1660
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3512
diff changeset
1661 /* It's not okay to crash if the user selects a screwy cursor. */
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1662 count = x_catch_errors (dpy);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1663
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1664 if (!NILP (Vx_pointer_shape))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1666 CHECK_NUMBER (Vx_pointer_shape);
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1667 cursor = XCreateFontCursor (dpy, XINT (Vx_pointer_shape));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 else
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1670 cursor = XCreateFontCursor (dpy, XC_xterm);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1671 x_check_errors (dpy, "bad text pointer cursor: %s");
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1672
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1673 if (!NILP (Vx_nontext_pointer_shape))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1675 CHECK_NUMBER (Vx_nontext_pointer_shape);
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1676 nontext_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1677 = XCreateFontCursor (dpy, XINT (Vx_nontext_pointer_shape));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679 else
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1680 nontext_cursor = XCreateFontCursor (dpy, XC_left_ptr);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1681 x_check_errors (dpy, "bad nontext pointer cursor: %s");
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1682
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1683 if (!NILP (Vx_hourglass_pointer_shape))
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
1684 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1685 CHECK_NUMBER (Vx_hourglass_pointer_shape);
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1686 hourglass_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1687 = XCreateFontCursor (dpy, XINT (Vx_hourglass_pointer_shape));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1688 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
1689 else
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1690 hourglass_cursor = XCreateFontCursor (dpy, XC_watch);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1691 x_check_errors (dpy, "bad hourglass pointer cursor: %s");
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1692
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1693 x_check_errors (dpy, "bad nontext pointer cursor: %s");
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1694 if (!NILP (Vx_mode_pointer_shape))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1696 CHECK_NUMBER (Vx_mode_pointer_shape);
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1697 mode_cursor = XCreateFontCursor (dpy, XINT (Vx_mode_pointer_shape));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699 else
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1700 mode_cursor = XCreateFontCursor (dpy, XC_xterm);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1701 x_check_errors (dpy, "bad modeline pointer cursor: %s");
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1702
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1703 if (!NILP (Vx_sensitive_text_pointer_shape))
6759
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
1704 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1705 CHECK_NUMBER (Vx_sensitive_text_pointer_shape);
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
1706 cross_cursor
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1707 = XCreateFontCursor (dpy, XINT (Vx_sensitive_text_pointer_shape));
6759
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
1708 }
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
1709 else
44786
e21e4c449a60 (x_set_mouse_color): Change default for cross_cursor to XC_hand2.
Richard M. Stallman <rms@gnu.org>
parents: 44689
diff changeset
1710 cross_cursor = XCreateFontCursor (dpy, XC_hand2);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711
33960
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
1712 if (!NILP (Vx_window_horizontal_drag_shape))
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
1713 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1714 CHECK_NUMBER (Vx_window_horizontal_drag_shape);
33960
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
1715 horizontal_drag_cursor
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1716 = XCreateFontCursor (dpy, XINT (Vx_window_horizontal_drag_shape));
33960
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
1717 }
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
1718 else
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
1719 horizontal_drag_cursor
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1720 = XCreateFontCursor (dpy, XC_sb_h_double_arrow);
33960
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
1721
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1722 /* Check and report errors with the above calls. */
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1723 x_check_errors (dpy, "can't set cursor shape: %s");
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1724 x_uncatch_errors (dpy, count);
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1725
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 XColor fore_color, back_color;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1729 fore_color.pixel = x->mouse_pixel;
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
1730 x_query_color (f, &fore_color);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731 back_color.pixel = mask_color;
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
1732 x_query_color (f, &back_color);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1733
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1734 XRecolorCursor (dpy, cursor, &fore_color, &back_color);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1735 XRecolorCursor (dpy, nontext_cursor, &fore_color, &back_color);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1736 XRecolorCursor (dpy, mode_cursor, &fore_color, &back_color);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1737 XRecolorCursor (dpy, cross_cursor, &fore_color, &back_color);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1738 XRecolorCursor (dpy, hourglass_cursor, &fore_color, &back_color);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1739 XRecolorCursor (dpy, horizontal_drag_cursor, &fore_color, &back_color);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1742 if (FRAME_X_WINDOW (f) != 0)
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1743 XDefineCursor (dpy, FRAME_X_WINDOW (f), cursor);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1744
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1745 if (cursor != x->text_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1746 && x->text_cursor != 0)
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1747 XFreeCursor (dpy, x->text_cursor);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1748 x->text_cursor = cursor;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1749
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1750 if (nontext_cursor != x->nontext_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1751 && x->nontext_cursor != 0)
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1752 XFreeCursor (dpy, x->nontext_cursor);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1753 x->nontext_cursor = nontext_cursor;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1754
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1755 if (hourglass_cursor != x->hourglass_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1756 && x->hourglass_cursor != 0)
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1757 XFreeCursor (dpy, x->hourglass_cursor);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1758 x->hourglass_cursor = hourglass_cursor;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1759
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1760 if (mode_cursor != x->modeline_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1761 && x->modeline_cursor != 0)
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1762 XFreeCursor (dpy, f->output_data.x->modeline_cursor);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1763 x->modeline_cursor = mode_cursor;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1764
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1765 if (cross_cursor != x->cross_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1766 && x->cross_cursor != 0)
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1767 XFreeCursor (dpy, x->cross_cursor);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1768 x->cross_cursor = cross_cursor;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1769
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1770 if (horizontal_drag_cursor != x->horizontal_drag_cursor
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1771 && x->horizontal_drag_cursor != 0)
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1772 XFreeCursor (dpy, x->horizontal_drag_cursor);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1773 x->horizontal_drag_cursor = horizontal_drag_cursor;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1774
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1775 XFlush (dpy);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 UNBLOCK_INPUT;
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1777
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1778 update_face_from_frame_parameter (f, Qmouse_color, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1782 x_set_cursor_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1783 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 {
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1786 unsigned long fore_pixel, pixel;
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1787 int fore_pixel_allocated_p = 0, pixel_allocated_p = 0;
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1788 struct x_output *x = f->output_data.x;
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1789
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1790 if (!NILP (Vx_cursor_fore_pixel))
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1791 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1792 fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel,
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1793 WHITE_PIX_DEFAULT (f));
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1794 fore_pixel_allocated_p = 1;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1795 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 else
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1797 fore_pixel = x->background_pixel;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1798
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1799 pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1800 pixel_allocated_p = 1;
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1801
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1802 /* Make sure that the cursor color differs from the background color. */
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1803 if (pixel == x->background_pixel)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 {
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1805 if (pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1806 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1807 x_free_colors (f, &pixel, 1);
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1808 pixel_allocated_p = 0;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1809 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
1810
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1811 pixel = x->mouse_pixel;
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1812 if (pixel == fore_pixel)
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1813 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1814 if (fore_pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1815 {
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1816 x_free_colors (f, &fore_pixel, 1);
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1817 fore_pixel_allocated_p = 0;
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1818 }
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1819 fore_pixel = x->background_pixel;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1820 }
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1821 }
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1822
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1823 unload_color (f, x->cursor_foreground_pixel);
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1824 if (!fore_pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1825 fore_pixel = x_copy_color (f, fore_pixel);
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1826 x->cursor_foreground_pixel = fore_pixel;
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1827
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1828 unload_color (f, x->cursor_pixel);
28355
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1829 if (!pixel_allocated_p)
11d7a6fdad5f (x_set_cursor_color): Get color reference counts right.
Gerd Moellmann <gerd@gnu.org>
parents: 28347
diff changeset
1830 pixel = x_copy_color (f, pixel);
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1831 x->cursor_pixel = pixel;
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1832
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
1833 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 BLOCK_INPUT;
37762
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1836 XSetBackground (FRAME_X_DISPLAY (f), x->cursor_gc, x->cursor_pixel);
ddf0a963805f (x_set_foreground_color): Change frame's cursor_pixel
Gerd Moellmann <gerd@gnu.org>
parents: 37608
diff changeset
1837 XSetForeground (FRAME_X_DISPLAY (f), x->cursor_gc, fore_pixel);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1840 if (FRAME_VISIBLE_P (f))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 {
15999
0e148af7d4ec (x_set_cursor_color): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15942
diff changeset
1842 x_update_cursor (f, 0);
0e148af7d4ec (x_set_cursor_color): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents: 15942
diff changeset
1843 x_update_cursor (f, 1);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 }
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1846
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1847 update_face_from_frame_parameter (f, Qcursor_color, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1849
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1850 /* Set the border-color of frame F to value described by ARG.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 ARG can be a string naming a color.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852 The border-color is used for the border that is drawn by the X server.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 Note that this does not fully take effect if done before
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1854 F has an x-window; it must be redone when the window is created.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856 Note: this is done in two routines because of the way X10 works.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 Note: under X11, this is normally the province of the window manager,
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1859 and so emacs' border colors may be overridden. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1862 x_set_border_color (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1863 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 int pix;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
1868 CHECK_STRING (arg);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1869 pix = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1870 x_set_border_pixel (f, pix);
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
1871 update_face_from_frame_parameter (f, Qborder_color, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1874 /* Set the border-color of frame F to pixel value PIX.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 Note that this does not fully take effect if done before
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1876 F has an x-window. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1877
21536
468585662fa8 (x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents: 21267
diff changeset
1878 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1879 x_set_border_pixel (f, pix)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1880 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1881 int pix;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882 {
21779
6aaa0268fe91 (x_set_foreground_color, x_set_background_color)
Richard M. Stallman <rms@gnu.org>
parents: 21555
diff changeset
1883 unload_color (f, f->output_data.x->border_pixel);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1884 f->output_data.x->border_pixel = pix;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1885
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1886 if (FRAME_X_WINDOW (f) != 0 && f->output_data.x->border_width > 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 BLOCK_INPUT;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1889 XSetWindowBorder (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
11882
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
1890 (unsigned long)pix);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
1893 if (FRAME_VISIBLE_P (f))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1894 redraw_frame (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897
28347
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1898
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1899
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1900 void
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1901 x_set_cursor_type (f, arg, oldval)
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1902 FRAME_PTR f;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1903 Lisp_Object arg, oldval;
ce7dddf6dfb7 (x_specified_cursor_type): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28229
diff changeset
1904 {
47142
21cac7a2dcb9 (Vblink_cursor_alist): Removed.
Kim F. Storm <storm@cua.dk>
parents: 47086
diff changeset
1905 set_frame_cursor_types (f, arg);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1906
43987
ea6530f23937 (x_set_cursor_type): Set cursor_type_changed,
Richard M. Stallman <rms@gnu.org>
parents: 43917
diff changeset
1907 /* Make sure the cursor gets redrawn. */
ea6530f23937 (x_set_cursor_type): Set cursor_type_changed,
Richard M. Stallman <rms@gnu.org>
parents: 43917
diff changeset
1908 cursor_type_changed = 1;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1909 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1910
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
1911 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1912 x_set_icon_type (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
1913 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1916 int result;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1917
9543
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1918 if (STRINGP (arg))
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1919 {
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1920 if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt))
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1921 return;
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1922 }
3cf8aa53c4cf (x_set_icon_type): If icon-type is a string, then use
Richard M. Stallman <rms@gnu.org>
parents: 9528
diff changeset
1923 else if (!STRINGP (oldval) && EQ (oldval, Qnil) == EQ (arg, Qnil))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1924 return;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1926 BLOCK_INPUT;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 436
diff changeset
1927 if (NILP (arg))
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1928 result = x_text_icon (f,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1929 (char *) SDATA ((!NILP (f->icon_name)
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
1930 ? f->icon_name
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1931 : f->name)));
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1932 else
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1933 result = x_bitmap_icon (f, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935 if (result)
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 {
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
1937 UNBLOCK_INPUT;
9353
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1938 error ("No icon window available");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1939 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
1941 XFlush (FRAME_X_DISPLAY (f));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1942 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1943 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1945 /* Return non-nil if frame F wants a bitmap icon. */
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1946
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1947 Lisp_Object
9353
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1948 x_icon_type (f)
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1949 FRAME_PTR f;
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1950 {
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1951 Lisp_Object tem;
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1952
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1953 tem = assq_no_quit (Qicon_type, f->param_alist);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1954 if (CONSP (tem))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
1955 return XCDR (tem);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1956 else
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
1957 return Qnil;
9353
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1958 }
30659ed71a1b (x_set_icon_type): Remove period from error message.
Richard M. Stallman <rms@gnu.org>
parents: 9329
diff changeset
1959
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1960 void
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1961 x_set_icon_name (f, arg, oldval)
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1962 struct frame *f;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1963 Lisp_Object arg, oldval;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1964 {
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1965 int result;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1966
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1967 if (STRINGP (arg))
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1968 {
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1969 if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt))
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1970 return;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1971 }
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1972 else if (!STRINGP (oldval) && EQ (oldval, Qnil) == EQ (arg, Qnil))
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1973 return;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1974
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
1975 f->icon_name = arg;
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1976
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
1977 if (f->output_data.x->icon_bitmap != 0)
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1978 return;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1979
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1980 BLOCK_INPUT;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1981
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1982 result = x_text_icon (f,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1983 (char *) SDATA ((!NILP (f->icon_name)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1984 ? f->icon_name
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1985 : !NILP (f->title)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1986 ? f->title
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
1987 : f->name)));
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1988
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1989 if (result)
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1990 {
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1991 UNBLOCK_INPUT;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1992 error ("No icon window available");
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1993 }
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1994
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1995 XFlush (FRAME_X_DISPLAY (f));
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1996 UNBLOCK_INPUT;
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
1997 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
1998
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2000 x_set_font (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2001 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 {
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2004 Lisp_Object result;
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
2005 Lisp_Object fontset_name;
18631
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
2006 Lisp_Object frame;
36446
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2007 int old_fontset = f->output_data.x->fontset;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2009 CHECK_STRING (arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010
21555
0927f341e390 (x_set_font): Give 2nd arg nil to Fquery_fontset.
Kenichi Handa <handa@m17n.org>
parents: 21549
diff changeset
2011 fontset_name = Fquery_fontset (arg, Qnil);
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
2012
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 BLOCK_INPUT;
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
2014 result = (STRINGP (fontset_name)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2015 ? x_new_fontset (f, SDATA (fontset_name))
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2016 : x_new_font (f, SDATA (arg)));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2017 UNBLOCK_INPUT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2018
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2019 if (EQ (result, Qnil))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2020 error ("Font `%s' is not defined", SDATA (arg));
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2021 else if (EQ (result, Qt))
24589
316c00e8bc62 (x_set_font): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 24412
diff changeset
2022 error ("The characters of the given font have varying widths");
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2023 else if (STRINGP (result))
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2024 {
36446
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2025 if (STRINGP (fontset_name))
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2026 {
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2027 /* Fontset names are built from ASCII font names, so the
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2028 names may be equal despite there was a change. */
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2029 if (old_fontset == f->output_data.x->fontset)
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2030 return;
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2031 }
59630511a774 (x_set_font): Handle case of x_new_fontset returning the
Gerd Moellmann <gerd@gnu.org>
parents: 36441
diff changeset
2032 else if (!NILP (Fequal (result, oldval)))
35859
c9edddbb8dbf (x_set_font): If font hasn't changed, avoid recomputing
Gerd Moellmann <gerd@gnu.org>
parents: 35819
diff changeset
2033 return;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2034
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2035 store_frame_param (f, Qfont, result);
3075
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2036 recompute_basic_faces (f);
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2037 }
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2038 else
878381e48b0d * xfns.c: Clear out the old face stuff.
Jim Blandy <jimb@redhat.com>
parents: 3048
diff changeset
2039 abort ();
18631
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
2040
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
2041 do_pending_window_change (0);
25153
fc8435c2ae0e (x_set_internal_border_width):
Richard M. Stallman <rms@gnu.org>
parents: 25082
diff changeset
2042
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2043 /* Don't call `face-set-after-frame-default' when faces haven't been
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2044 initialized yet. This is the case when called from
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2045 Fx_create_frame. In that case, the X widget or window doesn't
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2046 exist either, and we can end up in x_report_frame_params with a
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2047 null widget which gives a segfault. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2048 if (FRAME_FACE_CACHE (f))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2049 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2050 XSETFRAME (frame, f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2051 call1 (Qface_set_after_frame_default, frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2052 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054
41722
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2055 static void
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2056 x_set_fringe_width (f, new_value, old_value)
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2057 struct frame *f;
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2058 Lisp_Object new_value, old_value;
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2059 {
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2060 x_compute_fringe_widths (f, 1);
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2061 }
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
2062
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2064 x_set_border_width (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2065 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2066 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2068 CHECK_NUMBER (arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2069
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2070 if (XINT (arg) == f->output_data.x->border_width)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071 return;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
2073 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074 error ("Cannot change the border width of a window");
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2076 f->output_data.x->border_width = XINT (arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2080 x_set_internal_border_width (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2081 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2084 int old = f->output_data.x->internal_border_width;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2086 CHECK_NUMBER (arg);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2087 f->output_data.x->internal_border_width = XINT (arg);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2088 if (f->output_data.x->internal_border_width < 0)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2089 f->output_data.x->internal_border_width = 0;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2090
16396
4e4cc27b2a2a (x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents: 16357
diff changeset
2091 #ifdef USE_X_TOOLKIT
16351
ac552926fc7e (x_set_internal_border_width, Fx_create_frame):
Richard M. Stallman <rms@gnu.org>
parents: 16305
diff changeset
2092 if (f->output_data.x->edit_widget)
21536
468585662fa8 (x_destroy_bitmap): Declare as void, not int.
Karl Heuer <kwzh@gnu.org>
parents: 21267
diff changeset
2093 widget_store_internal_border (f->output_data.x->edit_widget);
16396
4e4cc27b2a2a (x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents: 16357
diff changeset
2094 #endif
16351
ac552926fc7e (x_set_internal_border_width, Fx_create_frame):
Richard M. Stallman <rms@gnu.org>
parents: 16305
diff changeset
2095
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2096 if (f->output_data.x->internal_border_width == old)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097 return;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2098
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
2099 if (FRAME_X_WINDOW (f) != 0)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2100 {
5899
4e8f26a0f2b7 *** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5721
diff changeset
2101 x_set_window_size (f, 0, f->width, f->height);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2102 SET_FRAME_GARBAGED (f);
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
2103 do_pending_window_change (0);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 }
40437
1ee61682a51f (x_set_internal_border_width): Set frame garbaged
Gerd Moellmann <gerd@gnu.org>
parents: 40427
diff changeset
2105 else
1ee61682a51f (x_set_internal_border_width): Set frame garbaged
Gerd Moellmann <gerd@gnu.org>
parents: 40427
diff changeset
2106 SET_FRAME_GARBAGED (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2109 void
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2110 x_set_visibility (f, value, oldval)
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2111 struct frame *f;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2112 Lisp_Object value, oldval;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2113 {
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2114 Lisp_Object frame;
9285
75f1c0d90b3d (x_set_frame_parameters, x_set_visibility, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9240
diff changeset
2115 XSETFRAME (frame, f);
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2116
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2117 if (NILP (value))
5899
4e8f26a0f2b7 *** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5721
diff changeset
2118 Fmake_frame_invisible (frame, Qt);
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
2119 else if (EQ (value, Qicon))
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
2120 Ficonify_frame (frame);
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
2121 else
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2122 Fmake_frame_visible (frame);
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2123 }
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2124
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2125
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2126 /* Change window heights in windows rooted in WINDOW by N lines. */
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2127
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2128 static void
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2129 x_change_window_heights (window, n)
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2130 Lisp_Object window;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2131 int n;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2132 {
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2133 struct window *w = XWINDOW (window);
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2134
9329
4e1048594e7f (x_set_menu_bar_lines_1): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9327
diff changeset
2135 XSETFASTINT (w->top, XFASTINT (w->top) + n);
4e1048594e7f (x_set_menu_bar_lines_1): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9327
diff changeset
2136 XSETFASTINT (w->height, XFASTINT (w->height) - n);
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2137
28010
5e3c139838a6 (x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents: 28001
diff changeset
2138 if (INTEGERP (w->orig_top))
5e3c139838a6 (x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents: 28001
diff changeset
2139 XSETFASTINT (w->orig_top, XFASTINT (w->orig_top) + n);
5e3c139838a6 (x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents: 28001
diff changeset
2140 if (INTEGERP (w->orig_height))
5e3c139838a6 (x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents: 28001
diff changeset
2141 XSETFASTINT (w->orig_height, XFASTINT (w->orig_height) - n);
5e3c139838a6 (x_set_menu_bar_lines_1): Adjust window's orig_top and
Gerd Moellmann <gerd@gnu.org>
parents: 28001
diff changeset
2142
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2143 /* Handle just the top child in a vertical split. */
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2144 if (!NILP (w->vchild))
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2145 x_change_window_heights (w->vchild, n);
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2146
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2147 /* Adjust all children in a horizontal split. */
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2148 for (window = w->hchild; !NILP (window); window = w->next)
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2149 {
3477
c079a2d6cf0e (x_set_menu_bar_lines_1): Adjust just the uppermost child
Richard M. Stallman <rms@gnu.org>
parents: 3447
diff changeset
2150 w = XWINDOW (window);
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2151 x_change_window_heights (window, n);
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2152 }
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2153 }
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2154
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2155 void
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2156 x_set_menu_bar_lines (f, value, oldval)
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2157 struct frame *f;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2158 Lisp_Object value, oldval;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2159 {
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2160 int nlines;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
2161 #ifndef USE_X_TOOLKIT
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2162 int olines = FRAME_MENU_BAR_LINES (f);
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
2163 #endif
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2164
2880
9a78169e44df * xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents: 2842
diff changeset
2165 /* Right now, menu bars don't work properly in minibuf-only frames;
9a78169e44df * xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents: 2842
diff changeset
2166 most of the commands try to apply themselves to the minibuffer
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2167 frame itself, and get an error because you can't switch buffers
2880
9a78169e44df * xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents: 2842
diff changeset
2168 in or split the minibuffer window. */
2885
cb1709f302e9 (x_set_menu_bar_lines): Fix typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 2880
diff changeset
2169 if (FRAME_MINIBUF_ONLY_P (f))
2880
9a78169e44df * xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents: 2842
diff changeset
2170 return;
9a78169e44df * xfns.c (x_set_menu_bar_lines): Minibuffer-only frames can't have
Jim Blandy <jimb@redhat.com>
parents: 2842
diff changeset
2171
9103
948e8acb6990 (x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9022
diff changeset
2172 if (INTEGERP (value))
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2173 nlines = XINT (value);
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2174 else
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2175 nlines = 0;
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2176
17556
c0f8f4264f7a (x_set_menu_bar_lines): Increment windows_or_buffers_changed.
Richard M. Stallman <rms@gnu.org>
parents: 17106
diff changeset
2177 /* Make sure we redisplay all windows in this frame. */
c0f8f4264f7a (x_set_menu_bar_lines): Increment windows_or_buffers_changed.
Richard M. Stallman <rms@gnu.org>
parents: 17106
diff changeset
2178 windows_or_buffers_changed++;
c0f8f4264f7a (x_set_menu_bar_lines): Increment windows_or_buffers_changed.
Richard M. Stallman <rms@gnu.org>
parents: 17106
diff changeset
2179
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2180 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2181 FRAME_MENU_BAR_LINES (f) = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2182 if (nlines)
12832
0d750e41c4f2 (x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents: 12773
diff changeset
2183 {
0d750e41c4f2 (x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents: 12773
diff changeset
2184 FRAME_EXTERNAL_MENU_BAR (f) = 1;
13734
714433bead7f (x_set_menu_bar_lines) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 13508
diff changeset
2185 if (FRAME_X_P (f) && f->output_data.x->menubar_widget == 0)
12832
0d750e41c4f2 (x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents: 12773
diff changeset
2186 /* Make sure next redisplay shows the menu bar. */
0d750e41c4f2 (x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents: 12773
diff changeset
2187 XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = Qt;
0d750e41c4f2 (x_set_menu_bar_lines) [USE_X_TOOLKIT]: When turning
Richard M. Stallman <rms@gnu.org>
parents: 12773
diff changeset
2188 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2189 else
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2190 {
5900
284c0d70a50a (x_set_menu_bar_lines) [USE_X_TOOLKIT]: Dont Call XtDestroyWidget but
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5899
diff changeset
2191 if (FRAME_EXTERNAL_MENU_BAR (f) == 1)
284c0d70a50a (x_set_menu_bar_lines) [USE_X_TOOLKIT]: Dont Call XtDestroyWidget but
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5899
diff changeset
2192 free_frame_menubar (f);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2193 FRAME_EXTERNAL_MENU_BAR (f) = 0;
13734
714433bead7f (x_set_menu_bar_lines) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 13508
diff changeset
2194 if (FRAME_X_P (f))
714433bead7f (x_set_menu_bar_lines) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents: 13508
diff changeset
2195 f->output_data.x->menubar_widget = 0;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2196 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2197 #else /* not USE_X_TOOLKIT && not USE_GTK */
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
2198 FRAME_MENU_BAR_LINES (f) = nlines;
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2199 x_change_window_heights (f->root_window, nlines - olines);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2200 #endif /* not USE_X_TOOLKIT */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2201 adjust_glyphs (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2202 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2203
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2204
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2205 /* Set the number of lines used for the tool bar of frame F to VALUE.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2206 VALUE not an integer, or < 0 means set the lines to zero. OLDVAL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2207 is the old number of tool bar lines. This function changes the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2208 height of all windows on frame F to match the new tool bar height.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2209 The frame's height doesn't change. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2210
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2211 void
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
2212 x_set_tool_bar_lines (f, value, oldval)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2213 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2214 Lisp_Object value, oldval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2215 {
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2216 int delta, nlines, root_height;
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2217 Lisp_Object root_window;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2218
35819
74e2d9de2fc1 (x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents: 35733
diff changeset
2219 /* Treat tool bars like menu bars. */
74e2d9de2fc1 (x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents: 35733
diff changeset
2220 if (FRAME_MINIBUF_ONLY_P (f))
74e2d9de2fc1 (x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents: 35733
diff changeset
2221 return;
74e2d9de2fc1 (x_set_tool_bar_lines): Do nothing If frame is
Gerd Moellmann <gerd@gnu.org>
parents: 35733
diff changeset
2222
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2223 /* Use VALUE only if an integer >= 0. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2224 if (INTEGERP (value) && XINT (value) >= 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2225 nlines = XFASTINT (value);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2226 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2227 nlines = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2228
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2229 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2230 FRAME_TOOL_BAR_LINES (f) = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2231 if (nlines)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2232 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2233 FRAME_EXTERNAL_TOOL_BAR (f) = 1;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2234 if (FRAME_X_P (f) && f->output_data.x->toolbar_widget == 0)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2235 /* Make sure next redisplay shows the tool bar. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2236 XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = Qt;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2237 update_frame_tool_bar (f);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2238 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2239 else
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2240 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2241 if (FRAME_EXTERNAL_TOOL_BAR (f))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2242 free_frame_tool_bar (f);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2243 FRAME_EXTERNAL_TOOL_BAR (f) = 0;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2244 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2245
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2246 return;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2247 #endif
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2248
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2249 /* Make sure we redisplay all windows in this frame. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2250 ++windows_or_buffers_changed;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2251
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
2252 delta = nlines - FRAME_TOOL_BAR_LINES (f);
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2253
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2254 /* Don't resize the tool-bar to more than we have room for. */
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2255 root_window = FRAME_ROOT_WINDOW (f);
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2256 root_height = XINT (XWINDOW (root_window)->height);
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2257 if (root_height - delta < 1)
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2258 {
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2259 delta = root_height - 1;
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2260 nlines = FRAME_TOOL_BAR_LINES (f) + delta;
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2261 }
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2262
25544
693ca9ba497a Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents: 25528
diff changeset
2263 FRAME_TOOL_BAR_LINES (f) = nlines;
31930
9c779861abff (x_set_tool_bar_lines): Don't use more lines for the
Gerd Moellmann <gerd@gnu.org>
parents: 31902
diff changeset
2264 x_change_window_heights (root_window, delta);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2265 adjust_glyphs (f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2266
31999
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2267 /* We also have to make sure that the internal border at the top of
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2268 the frame, below the menu bar or tool bar, is redrawn when the
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2269 tool bar disappears. This is so because the internal border is
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2270 below the tool bar if one is displayed, but is below the menu bar
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2271 if there isn't a tool bar. The tool bar draws into the area
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2272 below the menu bar. */
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2273 if (FRAME_X_WINDOW (f) && FRAME_TOOL_BAR_LINES (f) == 0)
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2274 {
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2275 updating_frame = f;
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2276 clear_frame ();
33601
1ee8ea329b7b (x_set_tool_bar_lines): When clearing the frame, also
Gerd Moellmann <gerd@gnu.org>
parents: 33589
diff changeset
2277 clear_current_matrices (f);
31999
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2278 updating_frame = NULL;
d862c73ea0d5 (x_set_tool_bar_lines): Clear frame when tool bar
Gerd Moellmann <gerd@gnu.org>
parents: 31930
diff changeset
2279 }
33747
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2280
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2281 /* If the tool bar gets smaller, the internal border below it
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2282 has to be cleared. It was formerly part of the display
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2283 of the larger tool bar, and updating windows won't clear it. */
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2284 if (delta < 0)
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2285 {
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2286 int height = FRAME_INTERNAL_BORDER_WIDTH (f);
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2287 int width = PIXEL_WIDTH (f);
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2288 int y = nlines * CANON_Y_UNIT (f);
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2289
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2290 BLOCK_INPUT;
35579
65c31f59048a * xfns.c (x_set_tool_bar_lines): Use x_clear_area instead of
Gerd Moellmann <gerd@gnu.org>
parents: 35566
diff changeset
2291 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
65c31f59048a * xfns.c (x_set_tool_bar_lines): Use x_clear_area instead of
Gerd Moellmann <gerd@gnu.org>
parents: 35566
diff changeset
2292 0, y, width, height, False);
33747
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2293 UNBLOCK_INPUT;
38625
0bfdfd449f4a (x_set_tool_bar_lines): Clear the tool bar window's
Gerd Moellmann <gerd@gnu.org>
parents: 38575
diff changeset
2294
0bfdfd449f4a (x_set_tool_bar_lines): Clear the tool bar window's
Gerd Moellmann <gerd@gnu.org>
parents: 38575
diff changeset
2295 if (WINDOWP (f->tool_bar_window))
0bfdfd449f4a (x_set_tool_bar_lines): Clear the tool bar window's
Gerd Moellmann <gerd@gnu.org>
parents: 38575
diff changeset
2296 clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix);
33747
e0e2461a24fe (x_set_tool_bar_lines): Clear internal border when
Gerd Moellmann <gerd@gnu.org>
parents: 33713
diff changeset
2297 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2298 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2299
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2300
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2301 /* Set the foreground color for scroll bars on frame F to VALUE.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2302 VALUE should be a string, a color name. If it isn't a string or
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2303 isn't a valid color name, do nothing. OLDVAL is the old value of
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2304 the frame parameter. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2305
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2306 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2307 x_set_scroll_bar_foreground (f, value, oldval)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2308 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2309 Lisp_Object value, oldval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2310 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2311 unsigned long pixel;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2312
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2313 if (STRINGP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2314 pixel = x_decode_color (f, value, BLACK_PIX_DEFAULT (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2315 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2316 pixel = -1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2317
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2318 if (f->output_data.x->scroll_bar_foreground_pixel != -1)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2319 unload_color (f, f->output_data.x->scroll_bar_foreground_pixel);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2320
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2321 f->output_data.x->scroll_bar_foreground_pixel = pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2322 if (FRAME_X_WINDOW (f) && FRAME_VISIBLE_P (f))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2323 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2324 /* Remove all scroll bars because they have wrong colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2325 if (condemn_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2326 (*condemn_scroll_bars_hook) (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2327 if (judge_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2328 (*judge_scroll_bars_hook) (f);
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
2329
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
2330 update_face_from_frame_parameter (f, Qscroll_bar_foreground, value);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2331 redraw_frame (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2332 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2333 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2334
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2335
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2336 /* Set the background color for scroll bars on frame F to VALUE VALUE
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2337 should be a string, a color name. If it isn't a string or isn't a
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2338 valid color name, do nothing. OLDVAL is the old value of the frame
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2339 parameter. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2340
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2341 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2342 x_set_scroll_bar_background (f, value, oldval)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2343 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2344 Lisp_Object value, oldval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2345 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2346 unsigned long pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2347
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2348 if (STRINGP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2349 pixel = x_decode_color (f, value, WHITE_PIX_DEFAULT (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2350 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2351 pixel = -1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2352
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2353 if (f->output_data.x->scroll_bar_background_pixel != -1)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2354 unload_color (f, f->output_data.x->scroll_bar_background_pixel);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2355
39619
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2356 #ifdef USE_TOOLKIT_SCROLL_BARS
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2357 /* Scrollbar shadow colors. */
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2358 if (f->output_data.x->scroll_bar_top_shadow_pixel != -1)
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2359 {
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2360 unload_color (f, f->output_data.x->scroll_bar_top_shadow_pixel);
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2361 f->output_data.x->scroll_bar_top_shadow_pixel = -1;
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2362 }
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2363 if (f->output_data.x->scroll_bar_bottom_shadow_pixel != -1)
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2364 {
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2365 unload_color (f, f->output_data.x->scroll_bar_bottom_shadow_pixel);
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2366 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1;
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2367 }
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2368 #endif /* USE_TOOLKIT_SCROLL_BARS */
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
2369
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2370 f->output_data.x->scroll_bar_background_pixel = pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2371 if (FRAME_X_WINDOW (f) && FRAME_VISIBLE_P (f))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2372 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2373 /* Remove all scroll bars because they have wrong colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2374 if (condemn_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2375 (*condemn_scroll_bars_hook) (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2376 if (judge_scroll_bars_hook)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2377 (*judge_scroll_bars_hook) (f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2378
25593
9aecfcf3cb43 (x_set_foreground_color): Call
Gerd Moellmann <gerd@gnu.org>
parents: 25550
diff changeset
2379 update_face_from_frame_parameter (f, Qscroll_bar_background, value);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2380 redraw_frame (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2381 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2382 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2383
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2384
30383
2bec5f82f5d0 Correct typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 30355
diff changeset
2385 /* Encode Lisp string STRING as a text in a format appropriate for
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2386 XICCC (X Inter Client Communication Conventions).
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2387
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2388 If STRING contains only ASCII characters, do no conversion and
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2389 return the string data of STRING. Otherwise, encode the text by
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2390 CODING_SYSTEM, and return a newly allocated memory area which
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2391 should be freed by `xfree' by a caller.
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2392
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2393 SELECTIONP non-zero means the string is being encoded for an X
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2394 selection, so it is safe to run pre-write conversions (which
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2395 may run Lisp code).
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2396
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2397 Store the byte length of resulting text in *TEXT_BYTES.
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2398
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2399 If the text contains only ASCII and Latin-1, store 1 in *STRING_P,
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2400 which means that the `encoding' of the result can be `STRING'.
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2401 Otherwise store 0 in *STRINGP, which means that the `encoding' of
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2402 the result should be `COMPOUND_TEXT'. */
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2403
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2404 unsigned char *
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2405 x_encode_text (string, coding_system, selectionp, text_bytes, stringp)
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2406 Lisp_Object string, coding_system;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2407 int *text_bytes, *stringp;
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2408 int selectionp;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2409 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2410 unsigned char *str = SDATA (string);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2411 int chars = SCHARS (string);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2412 int bytes = SBYTES (string);
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2413 int charset_info;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2414 int bufsize;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2415 unsigned char *buf;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2416 struct coding_system coding;
45603
97212b1039e9 (x_encode_text): Return stringp non-NULL if coding_system
Eli Zaretskii <eliz@gnu.org>
parents: 45413
diff changeset
2417 extern Lisp_Object Qcompound_text_with_extensions;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2418
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2419 charset_info = find_charset_in_text (str, chars, bytes, NULL, Qnil);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2420 if (charset_info == 0)
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2421 {
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2422 /* No multibyte character in OBJ. We need not encode it. */
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2423 *text_bytes = bytes;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2424 *stringp = 1;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2425 return str;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2426 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2427
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2428 setup_coding_system (coding_system, &coding);
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2429 if (selectionp
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2430 && SYMBOLP (coding.pre_write_conversion)
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2431 && !NILP (Ffboundp (coding.pre_write_conversion)))
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2432 {
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2433 string = run_pre_post_conversion_on_str (string, &coding, 1);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2434 str = SDATA (string);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2435 chars = SCHARS (string);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2436 bytes = SBYTES (string);
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2437 }
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2438 coding.src_multibyte = 1;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2439 coding.dst_multibyte = 0;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2440 coding.mode |= CODING_MODE_LAST_BLOCK;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2441 if (coding.type == coding_type_iso2022)
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2442 coding.flags |= CODING_FLAG_ISO_SAFE;
33242
421e3db4e24e (x_encode_text): Suppress producing escape sequences for composition.
Kenichi Handa <handa@m17n.org>
parents: 32606
diff changeset
2443 /* We suppress producing escape sequences for composition. */
421e3db4e24e (x_encode_text): Suppress producing escape sequences for composition.
Kenichi Handa <handa@m17n.org>
parents: 32606
diff changeset
2444 coding.composing = COMPOSITION_DISABLED;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2445 bufsize = encoding_buffer_size (&coding, bytes);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2446 buf = (unsigned char *) xmalloc (bufsize);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2447 encode_coding (&coding, str, buf, bytes, bufsize);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2448 *text_bytes = coding.produced;
45603
97212b1039e9 (x_encode_text): Return stringp non-NULL if coding_system
Eli Zaretskii <eliz@gnu.org>
parents: 45413
diff changeset
2449 *stringp = (charset_info == 1
97212b1039e9 (x_encode_text): Return stringp non-NULL if coding_system
Eli Zaretskii <eliz@gnu.org>
parents: 45413
diff changeset
2450 || (!EQ (coding_system, Qcompound_text)
97212b1039e9 (x_encode_text): Return stringp non-NULL if coding_system
Eli Zaretskii <eliz@gnu.org>
parents: 45413
diff changeset
2451 && !EQ (coding_system, Qcompound_text_with_extensions)));
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2452 return buf;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2453 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2454
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2455
4650
d81041bb1e3d comment fix
David J. MacKenzie <djm@gnu.org>
parents: 4629
diff changeset
2456 /* Change the name of frame F to NAME. If NAME is nil, set F's name to
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2457 x_id_name.
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2458
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2459 If EXPLICIT is non-zero, that indicates that lisp code is setting the
4650
d81041bb1e3d comment fix
David J. MacKenzie <djm@gnu.org>
parents: 4629
diff changeset
2460 name; if NAME is a string, set F's name to NAME and set
d81041bb1e3d comment fix
David J. MacKenzie <djm@gnu.org>
parents: 4629
diff changeset
2461 F->explicit_name; if NAME is Qnil, then clear F->explicit_name.
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2462
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2463 If EXPLICIT is zero, that indicates that Emacs redisplay code is
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2464 suggesting a new name, which lisp code should override; if
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2465 F->explicit_name is set, ignore the new name; otherwise, set it. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2466
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2467 void
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2468 x_set_name (f, name, explicit)
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2469 struct frame *f;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2470 Lisp_Object name;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2471 int explicit;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2472 {
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2473 /* Make sure that requests from lisp code override requests from
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2474 Emacs redisplay code. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2475 if (explicit)
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2476 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2477 /* If we're switching from explicit to implicit, we had better
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2478 update the mode lines and thereby update the title. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2479 if (f->explicit_name && NILP (name))
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2480 update_mode_lines = 1;
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2481
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2482 f->explicit_name = ! NILP (name);
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2483 }
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2484 else if (f->explicit_name)
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2485 return;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2486
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2487 /* If NAME is nil, set the name to the x_id_name. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2488 if (NILP (name))
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
2489 {
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
2490 /* Check for no change needed in this very common case
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
2491 before we do any consing. */
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
2492 if (!strcmp (FRAME_X_DISPLAY_INFO (f)->x_id_name,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2493 SDATA (f->name)))
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
2494 return;
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
2495 name = build_string (FRAME_X_DISPLAY_INFO (f)->x_id_name);
8090
bb03e344f07e (x_set_frame_parameters): Call x_set_offset directly.
Richard M. Stallman <rms@gnu.org>
parents: 7989
diff changeset
2496 }
833
14748faa4f17 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 817
diff changeset
2497 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2498 CHECK_STRING (name);
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2499
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2500 /* Don't change the name if it's already NAME. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2501 if (! NILP (Fstring_equal (name, f->name)))
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
2502 return;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
2503
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2504 f->name = name;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2505
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2506 /* For setting the frame title, the title parameter should override
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2507 the name parameter. */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2508 if (! NILP (f->title))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2509 name = f->title;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2510
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
2511 if (FRAME_X_WINDOW (f))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2512 {
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 700
diff changeset
2513 BLOCK_INPUT;
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
2514 #ifdef HAVE_X11R4
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
2515 {
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
2516 XTextProperty text, icon;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2517 int bytes, stringp;
30355
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2518 Lisp_Object coding_system;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2519
48000
5144fabfb105 (x_set_name): Encode by Qcompound_text unconditionally.
Kenichi Handa <handa@m17n.org>
parents: 47974
diff changeset
2520 coding_system = Qcompound_text;
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2521 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp);
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2522 text.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2523 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
2524 text.format = 8;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2525 text.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2526
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2527 if (NILP (f->icon_name))
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2528 {
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2529 icon = text;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2530 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2531 else
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2532 {
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2533 icon.value = x_encode_text (f->icon_name, coding_system, 0,
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2534 &bytes, &stringp);
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2535 icon.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2536 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2537 icon.format = 8;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2538 icon.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2539 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2540 #ifdef USE_X_TOOLKIT
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2541 XSetWMName (FRAME_X_DISPLAY (f),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2542 XtWindow (f->output_data.x->widget), &text);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
2543 XSetWMIconName (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget),
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
2544 &icon);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2545 #else /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2546 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2547 gtk_window_set_title (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2548 SDATA (name));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2549 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2550 &icon);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2551 #else /* not USE_GTK */
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2552 XSetWMName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &text);
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
2553 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &icon);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2554 #endif /* not USE_GTK */
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2555 #endif /* not USE_X_TOOLKIT */
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2556 if (!NILP (f->icon_name)
47974
ed2cc4e5f0b8 (x_set_name, x_set_title): `icon.value' has unsigned char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47731
diff changeset
2557 && icon.value != (unsigned char *) SDATA (f->icon_name))
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2558 xfree (icon.value);
47974
ed2cc4e5f0b8 (x_set_name, x_set_title): `icon.value' has unsigned char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47731
diff changeset
2559 if (text.value != (unsigned char *) SDATA (name))
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2560 xfree (text.value);
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
2561 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2562 #else /* not HAVE_X11R4 */
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2563 XSetIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2564 SDATA (name));
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2565 XStoreName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2566 SDATA (name));
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
2567 #endif /* not HAVE_X11R4 */
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 700
diff changeset
2568 UNBLOCK_INPUT;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2569 }
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2570 }
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2571
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2572 /* This function should be called when the user's lisp code has
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2573 specified a name for the frame; the name will override any set by the
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2574 redisplay code. */
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2575 void
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2576 x_explicitly_set_name (f, arg, oldval)
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2577 FRAME_PTR f;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2578 Lisp_Object arg, oldval;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2579 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2580 x_set_name (f, arg, 1);
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2581 }
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2582
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2583 /* This function should be called by Emacs redisplay code to set the
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2584 name; names set this way will never override names set by the user's
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2585 lisp code. */
1125
059624bf9bf0 Declare x_implicitly_set_name to be void.
Jim Blandy <jimb@redhat.com>
parents: 1096
diff changeset
2586 void
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2587 x_implicitly_set_name (f, arg, oldval)
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2588 FRAME_PTR f;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2589 Lisp_Object arg, oldval;
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2590 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
2591 x_set_name (f, arg, 0);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2592 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2593
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2594 /* Change the title of frame F to NAME.
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2595 If NAME is nil, use the frame name as the title.
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2596
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2597 If EXPLICIT is non-zero, that indicates that lisp code is setting the
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2598 name; if NAME is a string, set F's name to NAME and set
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2599 F->explicit_name; if NAME is Qnil, then clear F->explicit_name.
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2600
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2601 If EXPLICIT is zero, that indicates that Emacs redisplay code is
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2602 suggesting a new name, which lisp code should override; if
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2603 F->explicit_name is set, ignore the new name; otherwise, set it. */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2604
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2605 void
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
2606 x_set_title (f, name, old_name)
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2607 struct frame *f;
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
2608 Lisp_Object name, old_name;
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2609 {
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2610 /* Don't change the title if it's already NAME. */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2611 if (EQ (name, f->title))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2612 return;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2613
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2614 update_mode_lines = 1;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2615
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2616 f->title = name;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2617
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2618 if (NILP (name))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2619 name = f->name;
16732
f52c4fd47f03 (x_set_title): Check data type of NAME.
Richard M. Stallman <rms@gnu.org>
parents: 16682
diff changeset
2620 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2621 CHECK_STRING (name);
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2622
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2623 if (FRAME_X_WINDOW (f))
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2624 {
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2625 BLOCK_INPUT;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2626 #ifdef HAVE_X11R4
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2627 {
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2628 XTextProperty text, icon;
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2629 int bytes, stringp;
30355
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2630 Lisp_Object coding_system;
36c049a9730b *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30354
diff changeset
2631
48000
5144fabfb105 (x_set_name): Encode by Qcompound_text unconditionally.
Kenichi Handa <handa@m17n.org>
parents: 47974
diff changeset
2632 coding_system = Qcompound_text;
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2633 text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp);
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2634 text.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2635 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2636 text.format = 8;
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2637 text.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2638
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2639 if (NILP (f->icon_name))
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2640 {
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2641 icon = text;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2642 }
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2643 else
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2644 {
43452
75677c801c26 (x_encode_text): Accept additional arg SELECTIONP; all
Eli Zaretskii <eliz@gnu.org>
parents: 43426
diff changeset
2645 icon.value = x_encode_text (f->icon_name, coding_system, 0,
30354
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2646 &bytes, &stringp);
7540bd2b5a34 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 30351
diff changeset
2647 icon.encoding = (stringp ? XA_STRING
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2648 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2649 icon.format = 8;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2650 icon.nitems = bytes;
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2651 }
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2652 #ifdef USE_X_TOOLKIT
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2653 XSetWMName (FRAME_X_DISPLAY (f),
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2654 XtWindow (f->output_data.x->widget), &text);
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2655 XSetWMIconName (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget),
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2656 &icon);
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2657 #else /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2658 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2659 gtk_window_set_title (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2660 SDATA (name));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2661 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2662 &icon);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2663 #else /* not USE_GTK */
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2664 XSetWMName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &text);
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2665 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &icon);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2666 #endif /* not USE_GTK */
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2667 #endif /* not USE_X_TOOLKIT */
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2668 if (!NILP (f->icon_name)
47974
ed2cc4e5f0b8 (x_set_name, x_set_title): `icon.value' has unsigned char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47731
diff changeset
2669 && icon.value != (unsigned char *) SDATA (f->icon_name))
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2670 xfree (icon.value);
47974
ed2cc4e5f0b8 (x_set_name, x_set_title): `icon.value' has unsigned char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47731
diff changeset
2671 if (text.value != (unsigned char *) SDATA (name))
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
2672 xfree (text.value);
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2673 }
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2674 #else /* not HAVE_X11R4 */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2675 XSetIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2676 SDATA (name));
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2677 XStoreName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2678 SDATA (name));
14482
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2679 #endif /* not HAVE_X11R4 */
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2680 UNBLOCK_INPUT;
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2681 }
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2682 }
479987ba2c8d (x_frame_parms): Add "title" element.
Richard M. Stallman <rms@gnu.org>
parents: 14439
diff changeset
2683
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2684 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2685 x_set_autoraise (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2686 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2687 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2688 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2689 f->auto_raise = !EQ (Qnil, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2690 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2691
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2692 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2693 x_set_autolower (f, arg, oldval)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2694 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2695 Lisp_Object arg, oldval;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2696 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2697 f->auto_lower = !EQ (Qnil, arg);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2698 }
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2699
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2700 void
9580
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2701 x_set_unsplittable (f, arg, oldval)
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2702 struct frame *f;
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2703 Lisp_Object arg, oldval;
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2704 {
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2705 f->no_split = !NILP (arg);
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2706 }
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2707
bcc9342cf633 (x_set_unsplittable): New function.
Karl Heuer <kwzh@gnu.org>
parents: 9563
diff changeset
2708 void
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
2709 x_set_vertical_scroll_bars (f, arg, oldval)
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2710 struct frame *f;
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2711 Lisp_Object arg, oldval;
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2712 {
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2713 if ((EQ (arg, Qleft) && FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f))
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2714 || (EQ (arg, Qright) && FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f))
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2715 || (NILP (arg) && FRAME_HAS_VERTICAL_SCROLL_BARS (f))
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2716 || (!NILP (arg) && ! FRAME_HAS_VERTICAL_SCROLL_BARS (f)))
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2717 {
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2718 FRAME_VERTICAL_SCROLL_BAR_TYPE (f)
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2719 = (NILP (arg)
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2720 ? vertical_scroll_bar_none
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2721 : EQ (Qright, arg)
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2722 ? vertical_scroll_bar_right
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
2723 : vertical_scroll_bar_left);
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2724
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2725 /* We set this parameter before creating the X window for the
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2726 frame, so we can get the geometry right from the start.
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2727 However, if the window hasn't been created yet, we shouldn't
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2728 call x_set_window_size. */
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2729 if (FRAME_X_WINDOW (f))
5899
4e8f26a0f2b7 *** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 5721
diff changeset
2730 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f));
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
2731 do_pending_window_change (0);
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2732 }
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
2733 }
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2734
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2735 void
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2736 x_set_scroll_bar_width (f, arg, oldval)
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2737 struct frame *f;
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2738 Lisp_Object arg, oldval;
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2739 {
18594
5ca5ff1c74eb (x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents: 18114
diff changeset
2740 int wid = FONT_WIDTH (f->output_data.x->font);
5ca5ff1c74eb (x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents: 18114
diff changeset
2741
9166
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2742 if (NILP (arg))
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2743 {
25511
9bc9d4d6c716 (x_set_scroll_bar_width): Change conditional compilation
Gerd Moellmann <gerd@gnu.org>
parents: 25464
diff changeset
2744 #ifdef USE_TOOLKIT_SCROLL_BARS
9bc9d4d6c716 (x_set_scroll_bar_width): Change conditional compilation
Gerd Moellmann <gerd@gnu.org>
parents: 25464
diff changeset
2745 /* A minimum width of 14 doesn't look good for toolkit scroll bars. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2746 int width = 16 + 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2747 FRAME_SCROLL_BAR_COLS (f) = (width + wid - 1) / wid;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2748 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2749 #else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2750 /* Make the actual width at least 14 pixels and a multiple of a
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2751 character width. */
18594
5ca5ff1c74eb (x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents: 18114
diff changeset
2752 FRAME_SCROLL_BAR_COLS (f) = (14 + wid - 1) / wid;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2753
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2754 /* Use all of that space (aside from required margins) for the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2755 scroll bar. */
9166
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2756 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2757 #endif
18594
5ca5ff1c74eb (x_set_scroll_bar_width): By default, use enough
Richard M. Stallman <rms@gnu.org>
parents: 18114
diff changeset
2758
15891
dbc8c9c9d819 (x_set_scroll_bar_width): Call x_set_window_size when arg is nil.
Richard M. Stallman <rms@gnu.org>
parents: 15881
diff changeset
2759 if (FRAME_X_WINDOW (f))
dbc8c9c9d819 (x_set_scroll_bar_width): Call x_set_window_size when arg is nil.
Richard M. Stallman <rms@gnu.org>
parents: 15881
diff changeset
2760 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f));
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
2761 do_pending_window_change (0);
9166
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2762 }
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2763 else if (INTEGERP (arg) && XINT (arg) > 0
44b44e900cf1 (x_set_scroll_bar_width): Nil now means 2 columns' worth of pixels.
Karl Heuer <kwzh@gnu.org>
parents: 9103
diff changeset
2764 && XFASTINT (arg) != FRAME_SCROLL_BAR_PIXEL_WIDTH (f))
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2765 {
17629
fa92ac645cf0 (x_set_scroll_bar_width): If arg is too small, round it up.
Richard M. Stallman <rms@gnu.org>
parents: 17609
diff changeset
2766 if (XFASTINT (arg) <= 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM)
fa92ac645cf0 (x_set_scroll_bar_width): If arg is too small, round it up.
Richard M. Stallman <rms@gnu.org>
parents: 17609
diff changeset
2767 XSETINT (arg, 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM + 1);
16682
fe4b95eb15ae (x_set_scroll_bar_width): Reject a width that's too small.
Richard M. Stallman <rms@gnu.org>
parents: 16515
diff changeset
2768
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2769 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = XFASTINT (arg);
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2770 FRAME_SCROLL_BAR_COLS (f) = (XFASTINT (arg) + wid-1) / wid;
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2771 if (FRAME_X_WINDOW (f))
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2772 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f));
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
2773 }
16302
025b3dc7a6ba (Fx_create_frame): Default Qinternal_border_width to 1.
Richard M. Stallman <rms@gnu.org>
parents: 16254
diff changeset
2774
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
2775 change_frame_size (f, 0, FRAME_WIDTH (f), 0, 0, 0);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2776 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.hpos = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2777 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.x = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2778 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2779
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2780
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2781
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
2782 /* Subroutines of creating an X frame. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2783
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2784 /* Make sure that Vx_resource_name is set to a reasonable value.
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2785 Fix it up, or set it to `emacs' if it is too hopeless. */
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2786
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2787 static void
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2788 validate_x_resource_name ()
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2789 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2790 int len = 0;
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2791 /* Number of valid characters in the resource name. */
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2792 int good_count = 0;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2793 /* Number of invalid characters in the resource name. */
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2794 int bad_count = 0;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2795 Lisp_Object new;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2796 int i;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2797
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
2798 if (!STRINGP (Vx_resource_class))
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
2799 Vx_resource_class = build_string (EMACS_CLASS);
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
2800
7525
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2801 if (STRINGP (Vx_resource_name))
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2802 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2803 unsigned char *p = SDATA (Vx_resource_name);
7525
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2804 int i;
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2805
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2806 len = SBYTES (Vx_resource_name);
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2807
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2808 /* Only letters, digits, - and _ are valid in resource names.
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2809 Count the valid characters and count the invalid ones. */
7525
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2810 for (i = 0; i < len; i++)
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2811 {
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2812 int c = p[i];
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2813 if (! ((c >= 'a' && c <= 'z')
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2814 || (c >= 'A' && c <= 'Z')
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2815 || (c >= '0' && c <= '9')
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2816 || c == '-' || c == '_'))
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2817 bad_count++;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2818 else
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2819 good_count++;
7525
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2820 }
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2821 }
5b784d881c0f (validate_x_resource_name): Don't let Vx_resource_name have invalid characters.
Richard M. Stallman <rms@gnu.org>
parents: 7408
diff changeset
2822 else
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2823 /* Not a string => completely invalid. */
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2824 bad_count = 5, good_count = 0;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2825
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2826 /* If name is valid already, return. */
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2827 if (bad_count == 0)
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2828 return;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2829
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2830 /* If name is entirely invalid, or nearly so, use `emacs'. */
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2831 if (good_count == 0
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2832 || (good_count == 1 && bad_count > 0))
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2833 {
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2834 Vx_resource_name = build_string ("emacs");
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2835 return;
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2836 }
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2837
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2838 /* Name is partly valid. Copy it and replace the invalid characters
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2839 with underscores. */
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2840
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2841 Vx_resource_name = new = Fcopy_sequence (Vx_resource_name);
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2842
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2843 for (i = 0; i < len; i++)
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2844 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2845 int c = SREF (new, i);
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2846 if (! ((c >= 'a' && c <= 'z')
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2847 || (c >= 'A' && c <= 'Z')
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2848 || (c >= '0' && c <= '9')
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2849 || c == '-' || c == '_'))
46434
0baf57bc9d62 * xfns.c (validate_x_resource_name): Use SSET.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
2850 SSET (new, i, '_');
11353
9e3da029f921 (x_window): Copy the frame name to non-Lisp string.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2851 }
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2852 }
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2853
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2854
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2855 extern char *x_get_string_resource ();
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2856
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2857 DEFUN ("x-get-resource", Fx_get_resource, Sx_get_resource, 2, 4, 0,
40599
e564ab2ef09f (x-get-resource): Reindent.
Pavel Janík <Pavel@Janik.cz>
parents: 40437
diff changeset
2858 doc: /* Return the value of ATTRIBUTE, of class CLASS, from the X defaults database.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
2859 This uses `INSTANCE.ATTRIBUTE' as the key and `Emacs.CLASS' as the
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
2860 class, where INSTANCE is the name under which Emacs was invoked, or
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
2861 the name specified by the `-name' or `-rn' command-line arguments.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
2862
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
2863 The optional arguments COMPONENT and SUBCLASS add to the key and the
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
2864 class, respectively. You must specify both of them or neither.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
2865 If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE'
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
2866 and the class is `Emacs.CLASS.SUBCLASS'. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
2867 (attribute, class, component, subclass)
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2868 Lisp_Object attribute, class, component, subclass;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2869 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2870 register char *value;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2871 char *name_key;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2872 char *class_key;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2873
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
2874 check_x ();
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
2875
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2876 CHECK_STRING (attribute);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2877 CHECK_STRING (class);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
2878
1733
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2879 if (!NILP (component))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2880 CHECK_STRING (component);
1733
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2881 if (!NILP (subclass))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2882 CHECK_STRING (subclass);
1733
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2883 if (NILP (component) != NILP (subclass))
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2884 error ("x-get-resource: must specify both COMPONENT and SUBCLASS or neither");
2d41a3d7b9a6 (Fx_get_resource): Use EMACS_CLASS to make class_key
Richard M. Stallman <rms@gnu.org>
parents: 1719
diff changeset
2885
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
2886 validate_x_resource_name ();
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2887
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2888 /* Allocate space for the components, the dots which separate them,
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2889 and the final '\0'. Make them big enough for the worst case. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2890 name_key = (char *) alloca (SBYTES (Vx_resource_name)
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2891 + (STRINGP (component)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2892 ? SBYTES (component) : 0)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2893 + SBYTES (attribute)
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2894 + 3);
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2895
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2896 class_key = (char *) alloca (SBYTES (Vx_resource_class)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2897 + SBYTES (class)
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2898 + (STRINGP (subclass)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2899 ? SBYTES (subclass) : 0)
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2900 + 3);
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2901
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2902 /* Start with emacs.FRAMENAME for the name (the specific one)
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2903 and with `Emacs' for the class key (the general one). */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2904 strcpy (name_key, SDATA (Vx_resource_name));
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2905 strcpy (class_key, SDATA (Vx_resource_class));
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2906
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2907 strcat (class_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2908 strcat (class_key, SDATA (class));
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2909
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2910 if (!NILP (component))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2911 {
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2912 strcat (class_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2913 strcat (class_key, SDATA (subclass));
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2914
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2915 strcat (name_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2916 strcat (name_key, SDATA (component));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2917 }
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2918
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
2919 strcat (name_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2920 strcat (name_key, SDATA (attribute));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2921
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2922 value = x_get_string_resource (check_x_display_info (Qnil)->xrdb,
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
2923 name_key, class_key);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2924
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2925 if (value != (char *) 0)
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2926 return build_string (value);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2927 else
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2928 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2929 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2930
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2931 /* Get an X resource, like Fx_get_resource, but for display DPYINFO. */
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2932
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
2933 Lisp_Object
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2934 display_x_get_resource (dpyinfo, attribute, class, component, subclass)
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2935 struct x_display_info *dpyinfo;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2936 Lisp_Object attribute, class, component, subclass;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2937 {
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2938 register char *value;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2939 char *name_key;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2940 char *class_key;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2941
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2942 CHECK_STRING (attribute);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2943 CHECK_STRING (class);
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2944
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2945 if (!NILP (component))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2946 CHECK_STRING (component);
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2947 if (!NILP (subclass))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
2948 CHECK_STRING (subclass);
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2949 if (NILP (component) != NILP (subclass))
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2950 error ("x-get-resource: must specify both COMPONENT and SUBCLASS or neither");
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2951
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2952 validate_x_resource_name ();
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2953
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2954 /* Allocate space for the components, the dots which separate them,
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2955 and the final '\0'. Make them big enough for the worst case. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2956 name_key = (char *) alloca (SBYTES (Vx_resource_name)
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2957 + (STRINGP (component)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2958 ? SBYTES (component) : 0)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2959 + SBYTES (attribute)
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2960 + 3);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2961
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2962 class_key = (char *) alloca (SBYTES (Vx_resource_class)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2963 + SBYTES (class)
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2964 + (STRINGP (subclass)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2965 ? SBYTES (subclass) : 0)
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2966 + 3);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2967
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2968 /* Start with emacs.FRAMENAME for the name (the specific one)
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2969 and with `Emacs' for the class key (the general one). */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2970 strcpy (name_key, SDATA (Vx_resource_name));
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2971 strcpy (class_key, SDATA (Vx_resource_class));
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2972
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2973 strcat (class_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2974 strcat (class_key, SDATA (class));
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2975
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2976 if (!NILP (component))
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2977 {
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2978 strcat (class_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2979 strcat (class_key, SDATA (subclass));
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2980
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2981 strcat (name_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2982 strcat (name_key, SDATA (component));
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2983 }
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2984
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2985 strcat (name_key, ".");
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
2986 strcat (name_key, SDATA (attribute));
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2987
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2988 value = x_get_string_resource (dpyinfo->xrdb, name_key, class_key);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2989
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2990 if (value != (char *) 0)
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2991 return build_string (value);
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2992 else
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2993 return Qnil;
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2994 }
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
2995
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2996 /* Used when C code wants a resource value. */
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2997
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2998 char *
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
2999 x_get_resource_string (attribute, class)
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3000 char *attribute, *class;
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3001 {
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3002 char *name_key;
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3003 char *class_key;
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3004 struct frame *sf = SELECTED_FRAME ();
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3005
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3006 /* Allocate space for the components, the dots which separate them,
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3007 and the final '\0'. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3008 name_key = (char *) alloca (SBYTES (Vinvocation_name)
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3009 + strlen (attribute) + 2);
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3010 class_key = (char *) alloca ((sizeof (EMACS_CLASS) - 1)
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3011 + strlen (class) + 2);
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3012
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3013 sprintf (name_key, "%s.%s",
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3014 SDATA (Vinvocation_name),
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3015 attribute);
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3016 sprintf (class_key, "%s.%s", EMACS_CLASS, class);
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3017
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3018 return x_get_string_resource (FRAME_X_DISPLAY_INFO (sf)->xrdb,
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3019 name_key, class_key);
3173
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3020 }
c3c1b1ceab05 (x_get_resource_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3170
diff changeset
3021
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3022 /* Types we might convert a resource string into. */
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3023 enum resource_types
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3024 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3025 RES_TYPE_NUMBER,
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
3026 RES_TYPE_FLOAT,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3027 RES_TYPE_BOOLEAN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3028 RES_TYPE_STRING,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3029 RES_TYPE_SYMBOL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3030 };
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3031
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3032 /* Return the value of parameter PARAM.
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3033
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3034 First search ALIST, then Vdefault_frame_alist, then the X defaults
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
3035 database, using ATTRIBUTE as the attribute name and CLASS as its class.
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3036
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3037 Convert the resource to the type specified by desired_type.
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3038
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3039 If no default is specified, return Qunbound. If you call
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3040 x_get_arg, make sure you deal with Qunbound in a reasonable way,
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
3041 and don't let it get stored in any Lisp-visible variables! */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3042
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3043 static Lisp_Object
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3044 x_get_arg (dpyinfo, alist, param, attribute, class, type)
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3045 struct x_display_info *dpyinfo;
641
78a0b78aa6de *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 621
diff changeset
3046 Lisp_Object alist, param;
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3047 char *attribute;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
3048 char *class;
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3049 enum resource_types type;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3050 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3051 register Lisp_Object tem;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3052
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3053 tem = Fassq (param, alist);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3054 if (EQ (tem, Qnil))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3055 tem = Fassq (param, Vdefault_frame_alist);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3056 if (EQ (tem, Qnil))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3057 {
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3058
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3059 if (attribute)
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3060 {
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3061 tem = display_x_get_resource (dpyinfo,
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3062 build_string (attribute),
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3063 build_string (class),
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3064 Qnil, Qnil);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3065
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3066 if (NILP (tem))
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3067 return Qunbound;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3068
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3069 switch (type)
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3070 {
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3071 case RES_TYPE_NUMBER:
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3072 return make_number (atoi (SDATA (tem)));
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3073
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
3074 case RES_TYPE_FLOAT:
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3075 return make_float (atof (SDATA (tem)));
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
3076
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3077 case RES_TYPE_BOOLEAN:
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3078 tem = Fdowncase (tem);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3079 if (!strcmp (SDATA (tem), "on")
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3080 || !strcmp (SDATA (tem), "true"))
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3081 return Qt;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3082 else
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3083 return Qnil;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3084
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3085 case RES_TYPE_STRING:
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3086 return tem;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3087
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3088 case RES_TYPE_SYMBOL:
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3089 /* As a special case, we map the values `true' and `on'
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3090 to Qt, and `false' and `off' to Qnil. */
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3091 {
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
3092 Lisp_Object lower;
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
3093 lower = Fdowncase (tem);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3094 if (!strcmp (SDATA (lower), "on")
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3095 || !strcmp (SDATA (lower), "true"))
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3096 return Qt;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3097 else if (!strcmp (SDATA (lower), "off")
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3098 || !strcmp (SDATA (lower), "false"))
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3099 return Qnil;
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3100 else
2686
a84b9a78ab08 (x_get_arg): Call Fintern, not intern.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
3101 return Fintern (tem, Qnil);
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
3102 }
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
3103
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3104 default:
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3105 abort ();
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3106 }
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3107 }
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3108 else
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3109 return Qunbound;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3110 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3111 return Fcdr (tem);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3112 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3113
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3114 /* Like x_get_arg, but also record the value in f->param_alist. */
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3115
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3116 static Lisp_Object
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3117 x_get_and_record_arg (f, alist, param, attribute, class, type)
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3118 struct frame *f;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3119 Lisp_Object alist, param;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3120 char *attribute;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3121 char *class;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3122 enum resource_types type;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3123 {
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3124 Lisp_Object value;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3125
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3126 value = x_get_arg (FRAME_X_DISPLAY_INFO (f), alist, param,
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3127 attribute, class, type);
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3128 if (! NILP (value))
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3129 store_frame_param (f, param, value);
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3130
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3131 return value;
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3132 }
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
3133
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3134 /* Record in frame F the specified or default value according to ALIST
19095
2f58824bf3f6 (x_set_frame_parameters): Heading comment fixed.
Kenichi Handa <handa@m17n.org>
parents: 19026
diff changeset
3135 of the parameter named PROP (a Lisp symbol).
2f58824bf3f6 (x_set_frame_parameters): Heading comment fixed.
Kenichi Handa <handa@m17n.org>
parents: 19026
diff changeset
3136 If no value is specified for PROP, look for an X default for XPROP
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3137 on the frame named NAME.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3138 If that is not found either, use the value DEFLT. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3139
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3140 static Lisp_Object
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
3141 x_default_parameter (f, alist, prop, deflt, xprop, xclass, type)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3142 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3143 Lisp_Object alist;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3144 Lisp_Object prop;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3145 Lisp_Object deflt;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3146 char *xprop;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
3147 char *xclass;
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
3148 enum resource_types type;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3149 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3150 Lisp_Object tem;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3151
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3152 tem = x_get_arg (FRAME_X_DISPLAY_INFO (f), alist, prop, xprop, xclass, type);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3153 if (EQ (tem, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3154 tem = deflt;
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3155 x_set_frame_parameters (f, Fcons (Fcons (prop, tem), Qnil));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3156 return tem;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3157 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3158
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3159
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3160 /* Record in frame F the specified or default value according to ALIST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3161 of the parameter named PROP (a Lisp symbol). If no value is
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3162 specified for PROP, look for an X default for XPROP on the frame
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3163 named NAME. If that is not found either, use the value DEFLT. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3164
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3165 static Lisp_Object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3166 x_default_scroll_bar_color_parameter (f, alist, prop, xprop, xclass,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3167 foreground_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3168 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3169 Lisp_Object alist;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3170 Lisp_Object prop;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3171 char *xprop;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3172 char *xclass;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3173 int foreground_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3174 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3175 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3176 Lisp_Object tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3177
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3178 tem = x_get_arg (dpyinfo, alist, prop, xprop, xclass, RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3179 if (EQ (tem, Qunbound))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3180 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3181 #ifdef USE_TOOLKIT_SCROLL_BARS
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3182
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3183 /* See if an X resource for the scroll bar color has been
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3184 specified. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3185 tem = display_x_get_resource (dpyinfo,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3186 build_string (foreground_p
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3187 ? "foreground"
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3188 : "background"),
39812
66e0816837a8 Update calls to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3189 empty_string,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3190 build_string ("verticalScrollBar"),
39812
66e0816837a8 Update calls to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
3191 empty_string);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3192 if (!STRINGP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3193 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3194 /* If nothing has been specified, scroll bars will use a
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3195 toolkit-dependent default. Because these defaults are
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3196 difficult to get at without actually creating a scroll
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3197 bar, use nil to indicate that no color has been
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3198 specified. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3199 tem = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3200 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3201
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3202 #else /* not USE_TOOLKIT_SCROLL_BARS */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3203
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3204 tem = Qnil;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3205
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3206 #endif /* not USE_TOOLKIT_SCROLL_BARS */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3207 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3208
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3209 x_set_frame_parameters (f, Fcons (Fcons (prop, tem), Qnil));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3210 return tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3211 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3212
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3213
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3214
2328
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
3215 DEFUN ("x-parse-geometry", Fx_parse_geometry, Sx_parse_geometry, 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
3216 doc: /* Parse an X-style geometry string STRING.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
3217 Returns an alist of the form ((top . TOP), (left . LEFT) ... ).
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
3218 The properties returned may include `top', `left', `height', and `width'.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
3219 The value of `left' or `top' may be an integer,
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
3220 or a list (+ N) meaning N pixels relative to top/left corner,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
3221 or a list (- N) meaning -N pixels relative to bottom/right corner. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
3222 (string)
1528
924c8a609582 * xfns.c (x_decode_color, Fx_color_display_p): x_screen_planes is
Jim Blandy <jimb@redhat.com>
parents: 1438
diff changeset
3223 Lisp_Object string;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3224 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3225 int geometry, x, y;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3226 unsigned int width, height;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3227 Lisp_Object result;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3228
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
3229 CHECK_STRING (string);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3230
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3231 geometry = XParseGeometry ((char *) SDATA (string),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3232 &x, &y, &width, &height);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3233
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3234 #if 0
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3235 if (!!(geometry & XValue) != !!(geometry & YValue))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3236 error ("Must specify both x and y position, or neither");
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3237 #endif
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3238
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3239 result = Qnil;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3240 if (geometry & XValue)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3241 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3242 Lisp_Object element;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3243
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3244 if (x >= 0 && (geometry & XNegative))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3245 element = Fcons (Qleft, Fcons (Qminus, Fcons (make_number (-x), Qnil)));
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3246 else if (x < 0 && ! (geometry & XNegative))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3247 element = Fcons (Qleft, Fcons (Qplus, Fcons (make_number (x), Qnil)));
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3248 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3249 element = Fcons (Qleft, make_number (x));
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3250 result = Fcons (element, result);
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3251 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3252
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3253 if (geometry & YValue)
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3254 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3255 Lisp_Object element;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3256
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3257 if (y >= 0 && (geometry & YNegative))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3258 element = Fcons (Qtop, Fcons (Qminus, Fcons (make_number (-y), Qnil)));
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3259 else if (y < 0 && ! (geometry & YNegative))
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3260 element = Fcons (Qtop, Fcons (Qplus, Fcons (make_number (y), Qnil)));
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3261 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3262 element = Fcons (Qtop, make_number (y));
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3263 result = Fcons (element, result);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3264 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3265
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3266 if (geometry & WidthValue)
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3267 result = Fcons (Fcons (Qwidth, make_number (width)), result);
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3268 if (geometry & HeightValue)
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3269 result = Fcons (Fcons (Qheight, make_number (height)), result);
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3270
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3271 return result;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3272 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3273
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3274 /* Calculate the desired size and position of this window,
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3275 and return the flags saying which aspects were specified.
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3276
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3277 This function does not make the coordinates positive. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3278
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3279 #define DEFAULT_ROWS 40
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3280 #define DEFAULT_COLS 80
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3281
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
3282 static int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3283 x_figure_window_size (f, parms)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3284 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3285 Lisp_Object parms;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3286 {
7251
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3287 register Lisp_Object tem0, tem1, tem2;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3288 long window_prompting = 0;
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
3289 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3290
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3291 /* Default values if we fall through.
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3292 Actually, if that happens we should get
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3293 window manager prompting. */
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
3294 SET_FRAME_WIDTH (f, DEFAULT_COLS);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3295 f->height = DEFAULT_ROWS;
3108
461470daafaa (x_figure_window_size): Make the default frame coords (0,0).
Richard M. Stallman <rms@gnu.org>
parents: 3080
diff changeset
3296 /* Window managers expect that if program-specified
461470daafaa (x_figure_window_size): Make the default frame coords (0,0).
Richard M. Stallman <rms@gnu.org>
parents: 3080
diff changeset
3297 positions are not (0,0), they're intentional, not defaults. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3298 f->output_data.x->top_pos = 0;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3299 f->output_data.x->left_pos = 0;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3300
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3301 tem0 = x_get_arg (dpyinfo, parms, Qheight, 0, 0, RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3302 tem1 = x_get_arg (dpyinfo, parms, Qwidth, 0, 0, RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3303 tem2 = x_get_arg (dpyinfo, parms, Quser_size, 0, 0, RES_TYPE_NUMBER);
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3304 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3305 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3306 if (!EQ (tem0, Qunbound))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3307 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
3308 CHECK_NUMBER (tem0);
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3309 f->height = XINT (tem0);
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3310 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3311 if (!EQ (tem1, Qunbound))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3312 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
3313 CHECK_NUMBER (tem1);
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
3314 SET_FRAME_WIDTH (f, XINT (tem1));
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3315 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3316 if (!NILP (tem2) && !EQ (tem2, Qunbound))
7251
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3317 window_prompting |= USSize;
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3318 else
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3319 window_prompting |= PSize;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3320 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3321
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3322 f->output_data.x->vertical_scroll_bar_extra
9240
60497ceed71a (x_figure_window_size): Use new formula for scroll bar width.
Karl Heuer <kwzh@gnu.org>
parents: 9231
diff changeset
3323 = (!FRAME_HAS_VERTICAL_SCROLL_BARS (f)
60497ceed71a (x_figure_window_size): Use new formula for scroll bar width.
Karl Heuer <kwzh@gnu.org>
parents: 9231
diff changeset
3324 ? 0
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3325 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.x->font)));
41722
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
3326
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
3327 x_compute_fringe_widths (f, 0);
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
3328
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3329 f->output_data.x->pixel_width = CHAR_TO_PIXEL_WIDTH (f, f->width);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3330 f->output_data.x->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3331
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3332 tem0 = x_get_arg (dpyinfo, parms, Qtop, 0, 0, RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3333 tem1 = x_get_arg (dpyinfo, parms, Qleft, 0, 0, RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3334 tem2 = x_get_arg (dpyinfo, parms, Quser_position, 0, 0, RES_TYPE_NUMBER);
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3335 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3336 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3337 if (EQ (tem0, Qminus))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3338 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3339 f->output_data.x->top_pos = 0;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3340 window_prompting |= YNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3341 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3342 else if (CONSP (tem0) && EQ (XCAR (tem0), Qminus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3343 && CONSP (XCDR (tem0))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3344 && INTEGERP (XCAR (XCDR (tem0))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3345 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3346 f->output_data.x->top_pos = - XINT (XCAR (XCDR (tem0)));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3347 window_prompting |= YNegative;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3348 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3349 else if (CONSP (tem0) && EQ (XCAR (tem0), Qplus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3350 && CONSP (XCDR (tem0))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3351 && INTEGERP (XCAR (XCDR (tem0))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3352 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3353 f->output_data.x->top_pos = XINT (XCAR (XCDR (tem0)));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3354 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3355 else if (EQ (tem0, Qunbound))
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3356 f->output_data.x->top_pos = 0;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3357 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3358 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
3359 CHECK_NUMBER (tem0);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3360 f->output_data.x->top_pos = XINT (tem0);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3361 if (f->output_data.x->top_pos < 0)
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3362 window_prompting |= YNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3363 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3364
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3365 if (EQ (tem1, Qminus))
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3366 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3367 f->output_data.x->left_pos = 0;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3368 window_prompting |= XNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3369 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3370 else if (CONSP (tem1) && EQ (XCAR (tem1), Qminus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3371 && CONSP (XCDR (tem1))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3372 && INTEGERP (XCAR (XCDR (tem1))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3373 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3374 f->output_data.x->left_pos = - XINT (XCAR (XCDR (tem1)));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3375 window_prompting |= XNegative;
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3376 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3377 else if (CONSP (tem1) && EQ (XCAR (tem1), Qplus)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3378 && CONSP (XCDR (tem1))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3379 && INTEGERP (XCAR (XCDR (tem1))))
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3380 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
3381 f->output_data.x->left_pos = XINT (XCAR (XCDR (tem1)));
9022
10fa443c671a (Fx_create_frame): Rename menuBarLines resource to menuBar.
Richard M. Stallman <rms@gnu.org>
parents: 9014
diff changeset
3382 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3383 else if (EQ (tem1, Qunbound))
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3384 f->output_data.x->left_pos = 0;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3385 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3386 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
3387 CHECK_NUMBER (tem1);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3388 f->output_data.x->left_pos = XINT (tem1);
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3389 if (f->output_data.x->left_pos < 0)
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3390 window_prompting |= XNegative;
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3391 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3392
10264
92dcc001aa20 (x_figure_window_size): Treat missing user-position parm as nil.
Richard M. Stallman <rms@gnu.org>
parents: 10222
diff changeset
3393 if (!NILP (tem2) && ! EQ (tem2, Qunbound))
7251
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3394 window_prompting |= USPosition;
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3395 else
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
3396 window_prompting |= PPosition;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3397 }
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
3398
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3399 if (f->output_data.x->want_fullscreen != FULLSCREEN_NONE)
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3400 {
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3401 int left, top;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3402 int width, height;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3403
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3404 /* It takes both for some WM:s to place it where we want */
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3405 window_prompting = USPosition | PPosition;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3406 x_fullscreen_adjust (f, &width, &height, &top, &left);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3407 f->width = width;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3408 f->height = height;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3409 f->output_data.x->pixel_width = CHAR_TO_PIXEL_WIDTH (f, f->width);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3410 f->output_data.x->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3411 f->output_data.x->left_pos = left;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3412 f->output_data.x->top_pos = top;
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
3413 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3414
3293
03e4cad68481 (Fx_close_current_connection): Clear x_current_display.
Richard M. Stallman <rms@gnu.org>
parents: 3203
diff changeset
3415 return window_prompting;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3416 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3417
5229
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3418 #if !defined (HAVE_X11R4) && !defined (HAVE_XSETWMPROTOCOLS)
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3419
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3420 Status
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3421 XSetWMProtocols (dpy, w, protocols, count)
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3422 Display *dpy;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3423 Window w;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3424 Atom *protocols;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3425 int count;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3426 {
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3427 Atom prop;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3428 prop = XInternAtom (dpy, "WM_PROTOCOLS", False);
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3429 if (prop == None) return False;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3430 XChangeProperty (dpy, w, prop, XA_ATOM, 32, PropModeReplace,
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3431 (unsigned char *) protocols, count);
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3432 return True;
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3433 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3434 #endif /* not HAVE_X11R4 && not HAVE_XSETWMPROTOCOLS */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3435
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3436 #ifdef USE_X_TOOLKIT
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3437
9528
db02bc274f20 (Fx_create_frame): Init the FRAME_X_SCREEN as soon as can be done.
Richard M. Stallman <rms@gnu.org>
parents: 9353
diff changeset
3438 /* If the WM_PROTOCOLS property does not already contain WM_TAKE_FOCUS,
db02bc274f20 (Fx_create_frame): Init the FRAME_X_SCREEN as soon as can be done.
Richard M. Stallman <rms@gnu.org>
parents: 9353
diff changeset
3439 WM_DELETE_WINDOW, and WM_SAVE_YOURSELF, then add them. (They may
8845
c4b7fda8f611 (hack_wm_protocols): Arrange to handle WM_SAVE_YOURSELF.
Richard M. Stallman <rms@gnu.org>
parents: 8782
diff changeset
3440 already be present because of the toolkit (Motif adds some of them,
c4b7fda8f611 (hack_wm_protocols): Arrange to handle WM_SAVE_YOURSELF.
Richard M. Stallman <rms@gnu.org>
parents: 8782
diff changeset
3441 for example, but Xt doesn't). */
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3442
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3443 static void
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3444 hack_wm_protocols (f, widget)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3445 FRAME_PTR f;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3446 Widget widget;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3447 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3448 Display *dpy = XtDisplay (widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3449 Window w = XtWindow (widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3450 int need_delete = 1;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3451 int need_focus = 1;
8845
c4b7fda8f611 (hack_wm_protocols): Arrange to handle WM_SAVE_YOURSELF.
Richard M. Stallman <rms@gnu.org>
parents: 8782
diff changeset
3452 int need_save = 1;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3453
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3454 BLOCK_INPUT;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3455 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3456 Atom type, *atoms = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3457 int format = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3458 unsigned long nitems = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3459 unsigned long bytes_after;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3460
11882
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3461 if ((XGetWindowProperty (dpy, w,
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3462 FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols,
11894
b20c45d49063 (hack_wm_protocols): Use cast instead of suffix.
Karl Heuer <kwzh@gnu.org>
parents: 11893
diff changeset
3463 (long)0, (long)100, False, XA_ATOM,
11882
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3464 &type, &format, &nitems, &bytes_after,
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3465 (unsigned char **) &atoms)
8b3575269610 (hack_wm_protocols): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11774
diff changeset
3466 == Success)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3467 && format == 32 && type == XA_ATOM)
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3468 while (nitems > 0)
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3469 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3470 nitems--;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3471 if (atoms[nitems] == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3472 need_delete = 0;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3473 else if (atoms[nitems] == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3474 need_focus = 0;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3475 else if (atoms[nitems] == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3476 need_save = 0;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3477 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3478 if (atoms) XFree ((char *) atoms);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3479 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3480 {
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3481 Atom props [10];
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3482 int count = 0;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3483 if (need_delete)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3484 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3485 if (need_focus)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3486 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3487 if (need_save)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3488 props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3489 if (count)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3490 XChangeProperty (dpy, w, FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols,
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3491 XA_ATOM, 32, PropModeAppend,
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3492 (unsigned char *) props, count);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3493 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3494 UNBLOCK_INPUT;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3495 }
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3496 #endif
27157
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3497
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3498
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3499
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3500 /* Support routines for XIC (X Input Context). */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3501
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3502 #ifdef HAVE_X_I18N
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3503
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3504 static XFontSet xic_create_xfontset P_ ((struct frame *, char *));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3505 static XIMStyle best_xim_style P_ ((XIMStyles *, XIMStyles *));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3506
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3507
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3508 /* Supported XIM styles, ordered by preferenc. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3509
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3510 static XIMStyle supported_xim_styles[] =
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3511 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3512 XIMPreeditPosition | XIMStatusArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3513 XIMPreeditPosition | XIMStatusNothing,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3514 XIMPreeditPosition | XIMStatusNone,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3515 XIMPreeditNothing | XIMStatusArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3516 XIMPreeditNothing | XIMStatusNothing,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3517 XIMPreeditNothing | XIMStatusNone,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3518 XIMPreeditNone | XIMStatusArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3519 XIMPreeditNone | XIMStatusNothing,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3520 XIMPreeditNone | XIMStatusNone,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3521 0,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3522 };
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3523
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3524
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3525 /* Create an X fontset on frame F with base font name
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3526 BASE_FONTNAME.. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3527
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3528 static XFontSet
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3529 xic_create_xfontset (f, base_fontname)
27157
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3530 struct frame *f;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3531 char *base_fontname;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3532 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3533 XFontSet xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3534 char **missing_list;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3535 int missing_count;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3536 char *def_string;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3537
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3538 xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3539 base_fontname, &missing_list,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3540 &missing_count, &def_string);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3541 if (missing_list)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3542 XFreeStringList (missing_list);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3543
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3544 /* No need to free def_string. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3545 return xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3546 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3547
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3548
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3549 /* Value is the best input style, given user preferences USER (already
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3550 checked to be supported by Emacs), and styles supported by the
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3551 input method XIM. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3552
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3553 static XIMStyle
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3554 best_xim_style (user, xim)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3555 XIMStyles *user;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3556 XIMStyles *xim;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3557 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3558 int i, j;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3559
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3560 for (i = 0; i < user->count_styles; ++i)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3561 for (j = 0; j < xim->count_styles; ++j)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3562 if (user->supported_styles[i] == xim->supported_styles[j])
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3563 return user->supported_styles[i];
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3564
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3565 /* Return the default style. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3566 return XIMPreeditNothing | XIMStatusNothing;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3567 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3568
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3569 /* Create XIC for frame F. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3570
35592
52b5b50a0604 (xic_style): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35579
diff changeset
3571 static XIMStyle xic_style;
52b5b50a0604 (xic_style): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35579
diff changeset
3572
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3573 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3574 create_frame_xic (f)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3575 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3576 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3577 XIM xim;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3578 XIC xic = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3579 XFontSet xfs = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3580
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3581 if (FRAME_XIC (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3582 return;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3583
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3584 xim = FRAME_X_XIM (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3585 if (xim)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3586 {
27659
4137c807296b (create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents: 27502
diff changeset
3587 XRectangle s_area;
4137c807296b (create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents: 27502
diff changeset
3588 XPoint spot;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3589 XVaNestedList preedit_attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3590 XVaNestedList status_attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3591 char *base_fontname;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3592 int fontset;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3593
27659
4137c807296b (create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents: 27502
diff changeset
3594 s_area.x = 0; s_area.y = 0; s_area.width = 1; s_area.height = 1;
4137c807296b (create_frame_xic): Fix initialization of automatic aggregates for pcc.
Dave Love <fx@gnu.org>
parents: 27502
diff changeset
3595 spot.x = 0; spot.y = 1;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3596 /* Create X fontset. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3597 fontset = FRAME_FONTSET (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3598 if (fontset < 0)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3599 base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3600 else
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3601 {
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3602 /* Determine the base fontname from the ASCII font name of
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3603 FONTSET. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3604 char *ascii_font = (char *) SDATA (fontset_ascii (fontset));
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3605 char *p = ascii_font;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3606 int i;
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3607
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3608 for (i = 0; *p; p++)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3609 if (*p == '-') i++;
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3610 if (i != 14)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3611 /* As the font name doesn't conform to XLFD, we can't
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3612 modify it to get a suitable base fontname for the
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3613 frame. */
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3614 base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3615 else
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3616 {
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3617 int len = strlen (ascii_font) + 1;
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
3618 char *p1 = NULL;
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3619
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3620 for (i = 0, p = ascii_font; i < 8; p++)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3621 {
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3622 if (*p == '-')
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3623 {
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3624 i++;
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3625 if (i == 3)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3626 p1 = p + 1;
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3627 }
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3628 }
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3629 base_fontname = (char *) alloca (len);
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3630 bzero (base_fontname, len);
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3631 strcpy (base_fontname, "-*-*-");
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3632 bcopy (p1, base_fontname + 5, p - p1);
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3633 strcat (base_fontname, "*-*-*-*-*-*-*");
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
3634 }
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3635 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3636 xfs = xic_create_xfontset (f, base_fontname);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3637
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3638 /* Determine XIC style. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3639 if (xic_style == 0)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3640 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3641 XIMStyles supported_list;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3642 supported_list.count_styles = (sizeof supported_xim_styles
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3643 / sizeof supported_xim_styles[0]);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3644 supported_list.supported_styles = supported_xim_styles;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3645 xic_style = best_xim_style (&supported_list,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3646 FRAME_X_XIM_STYLES (f));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3647 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3648
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3649 preedit_attr = XVaCreateNestedList (0,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3650 XNFontSet, xfs,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3651 XNForeground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3652 FRAME_FOREGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3653 XNBackground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3654 FRAME_BACKGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3655 (xic_style & XIMPreeditPosition
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3656 ? XNSpotLocation
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3657 : NULL),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3658 &spot,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3659 NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3660 status_attr = XVaCreateNestedList (0,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3661 XNArea,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3662 &s_area,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3663 XNFontSet,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3664 xfs,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3665 XNForeground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3666 FRAME_FOREGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3667 XNBackground,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3668 FRAME_BACKGROUND_PIXEL (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3669 NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3670
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3671 xic = XCreateIC (xim,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3672 XNInputStyle, xic_style,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3673 XNClientWindow, FRAME_X_WINDOW(f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3674 XNFocusWindow, FRAME_X_WINDOW(f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3675 XNStatusAttributes, status_attr,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3676 XNPreeditAttributes, preedit_attr,
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3677 NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3678 XFree (preedit_attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3679 XFree (status_attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3680 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3681
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3682 FRAME_XIC (f) = xic;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3683 FRAME_XIC_STYLE (f) = xic_style;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3684 FRAME_XIC_FONTSET (f) = xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3685 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3686
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3687
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3688 /* Destroy XIC and free XIC fontset of frame F, if any. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3689
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3690 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3691 free_frame_xic (f)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3692 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3693 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3694 if (FRAME_XIC (f) == NULL)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3695 return;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3696
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3697 XDestroyIC (FRAME_XIC (f));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3698 if (FRAME_XIC_FONTSET (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3699 XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3700
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3701 FRAME_XIC (f) = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3702 FRAME_XIC_FONTSET (f) = NULL;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3703 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3704
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3705
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3706 /* Place preedit area for XIC of window W's frame to specified
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3707 pixel position X/Y. X and Y are relative to window W. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3708
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3709 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3710 xic_set_preeditarea (w, x, y)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3711 struct window *w;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3712 int x, y;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3713 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3714 struct frame *f = XFRAME (w->frame);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3715 XVaNestedList attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3716 XPoint spot;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3717
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3718 spot.x = WINDOW_TO_FRAME_PIXEL_X (w, x);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3719 spot.y = WINDOW_TO_FRAME_PIXEL_Y (w, y) + FONT_BASE (FRAME_FONT (f));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3720 attr = XVaCreateNestedList (0, XNSpotLocation, &spot, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3721 XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3722 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3723 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3724
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3725
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3726 /* Place status area for XIC in bottom right corner of frame F.. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3727
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3728 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3729 xic_set_statusarea (f)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3730 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3731 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3732 XIC xic = FRAME_XIC (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3733 XVaNestedList attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3734 XRectangle area;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3735 XRectangle *needed;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3736
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3737 /* Negotiate geometry of status area. If input method has existing
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3738 status area, use its current size. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3739 area.x = area.y = area.width = area.height = 0;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3740 attr = XVaCreateNestedList (0, XNAreaNeeded, &area, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3741 XSetICValues (xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3742 XFree (attr);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3743
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3744 attr = XVaCreateNestedList (0, XNAreaNeeded, &needed, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3745 XGetICValues (xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3746 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3747
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3748 if (needed->width == 0) /* Use XNArea instead of XNAreaNeeded */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3749 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3750 attr = XVaCreateNestedList (0, XNArea, &needed, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3751 XGetICValues (xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3752 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3753 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3754
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3755 area.width = needed->width;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3756 area.height = needed->height;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3757 area.x = PIXEL_WIDTH (f) - area.width - FRAME_INTERNAL_BORDER_WIDTH (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3758 area.y = (PIXEL_HEIGHT (f) - area.height
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3759 - FRAME_MENUBAR_HEIGHT (f)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3760 - FRAME_TOOLBAR_HEIGHT (f)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3761 - FRAME_INTERNAL_BORDER_WIDTH (f));
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3762 XFree (needed);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3763
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3764 attr = XVaCreateNestedList (0, XNArea, &area, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3765 XSetICValues(xic, XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3766 XFree (attr);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3767 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3768
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3769
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3770 /* Set X fontset for XIC of frame F, using base font name
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3771 BASE_FONTNAME. Called when a new Emacs fontset is chosen. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3772
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3773 void
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3774 xic_set_xfontset (f, base_fontname)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3775 struct frame *f;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3776 char *base_fontname;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3777 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3778 XVaNestedList attr;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3779 XFontSet xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3780
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3781 xfs = xic_create_xfontset (f, base_fontname);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3782
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3783 attr = XVaCreateNestedList (0, XNFontSet, xfs, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3784 if (FRAME_XIC_STYLE (f) & XIMPreeditPosition)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3785 XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3786 if (FRAME_XIC_STYLE (f) & XIMStatusArea)
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3787 XSetICValues (FRAME_XIC (f), XNStatusAttributes, attr, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3788 XFree (attr);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3789
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3790 if (FRAME_XIC_FONTSET (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3791 XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f));
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3792 FRAME_XIC_FONTSET (f) = xfs;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3793 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3794
27157
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3795 #endif /* HAVE_X_I18N */
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3796
27157
3dafddaefc2c (x_create_im): New function to set IM and IC of a frame.
Gerd Moellmann <gerd@gnu.org>
parents: 27153
diff changeset
3797
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3798
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3799 #ifdef USE_X_TOOLKIT
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3800
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3801 /* Create and set up the X widget for frame F. */
5229
110539a25499 (Fx_list_fonts): Handle BROKEN_XLISTFONTSWITHINFO.
Richard M. Stallman <rms@gnu.org>
parents: 5193
diff changeset
3802
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3803 static void
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3804 x_window (f, window_prompting, minibuffer_only)
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3805 struct frame *f;
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3806 long window_prompting;
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3807 int minibuffer_only;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3808 {
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3809 XClassHint class_hints;
6059
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3810 XSetWindowAttributes attributes;
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3811 unsigned long attribute_mask;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3812 Widget shell_widget;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3813 Widget pane_widget;
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3814 Widget frame_widget;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3815 Arg al [25];
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3816 int ac;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3817
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3818 BLOCK_INPUT;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3819
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3820 /* Use the resource name as the top-level widget name
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3821 for looking up resources. Make a non-Lisp copy
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3822 for the window manager, so GC relocation won't bother it.
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3823
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3824 Elsewhere we specify the window name for the window manager. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3825
11496
db02849ee365 (x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents: 11483
diff changeset
3826 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3827 char *str = (char *) SDATA (Vx_resource_name);
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3828 f->namebuf = (char *) xmalloc (strlen (str) + 1);
11496
db02849ee365 (x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents: 11483
diff changeset
3829 strcpy (f->namebuf, str);
db02849ee365 (x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents: 11483
diff changeset
3830 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3831
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3832 ac = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3833 XtSetArg (al[ac], XtNallowShellResize, 1); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3834 XtSetArg (al[ac], XtNinput, 1); ac++;
11707
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3835 XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3836 XtSetArg (al[ac], XtNborderWidth, f->output_data.x->border_width); ac++;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3837 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3838 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3839 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
11496
db02849ee365 (x_window): Use (or reuse) frame's namebuf instead of a
Karl Heuer <kwzh@gnu.org>
parents: 11483
diff changeset
3840 shell_widget = XtAppCreateShell (f->namebuf, EMACS_CLASS,
12019
63ee64941021 (x_top_window_to_frame): Don't match menu-bar widget.
Karl Heuer <kwzh@gnu.org>
parents: 12011
diff changeset
3841 applicationShellWidgetClass,
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
3842 FRAME_X_DISPLAY (f), al, ac);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3843
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3844 f->output_data.x->widget = shell_widget;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3845 /* maybe_set_screen_title_format (shell_widget); */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3846
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3847 pane_widget = lw_create_widget ("main", "pane", widget_id_tick++,
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3848 (widget_value *) NULL,
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3849 shell_widget, False,
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3850 (lw_callback) NULL,
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3851 (lw_callback) NULL,
27343
43230463dfcf (x_window): Call lw_create_widget with new parameter
Gerd Moellmann <gerd@gnu.org>
parents: 27157
diff changeset
3852 (lw_callback) NULL,
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3853 (lw_callback) NULL);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3854
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3855 ac = 0;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3856 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3857 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3858 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3859 XtSetValues (pane_widget, al, ac);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3860 f->output_data.x->column_widget = pane_widget;
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3861
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3862 /* mappedWhenManaged to false tells to the paned window to not map/unmap
7040
cd4dd38925f9 (x_window): Test FRAME_EXTERNAL_MENU_BAR
Richard M. Stallman <rms@gnu.org>
parents: 6940
diff changeset
3863 the emacs screen when changing menubar. This reduces flickering. */
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3864
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3865 ac = 0;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3866 XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3867 XtSetArg (al[ac], XtNshowGrip, 0); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3868 XtSetArg (al[ac], XtNallowResize, 1); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3869 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++;
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3870 XtSetArg (al[ac], XtNemacsFrame, f); ac++;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3871 XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3872 XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3873 XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3874 frame_widget = XtCreateWidget (f->namebuf, emacsFrameClass, pane_widget,
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
3875 al, ac);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3876
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3877 f->output_data.x->edit_widget = frame_widget;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3878
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3879 XtManageChild (frame_widget);
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3880
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3881 /* Do some needed geometry management. */
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3882 {
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3883 int len;
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3884 char *tem, shell_position[32];
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3885 Arg al[2];
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3886 int ac = 0;
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3887 int extra_borders = 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3888 int menubar_size
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3889 = (f->output_data.x->menubar_widget
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3890 ? (f->output_data.x->menubar_widget->core.height
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3891 + f->output_data.x->menubar_widget->core.border_width)
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
3892 : 0);
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3893
15942
ff30ec8aab54 (x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents: 15891
diff changeset
3894 #if 0 /* Experimentally, we now get the right results
ff30ec8aab54 (x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents: 15891
diff changeset
3895 for -geometry -0-0 without this. 24 Aug 96, rms. */
7969
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3896 if (FRAME_EXTERNAL_MENU_BAR (f))
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3897 {
9808
4c43c9dbe130 (x_window): Make ibw 0 by default.
Richard M. Stallman <rms@gnu.org>
parents: 9742
diff changeset
3898 Dimension ibw = 0;
7969
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3899 XtVaGetValues (pane_widget, XtNinternalBorderWidth, &ibw, NULL);
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3900 menubar_size += ibw;
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3901 }
15942
ff30ec8aab54 (x_window): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents: 15891
diff changeset
3902 #endif
7969
7f15f77cb644 (x_window): Take account of pane widget internal border width.
Richard M. Stallman <rms@gnu.org>
parents: 7946
diff changeset
3903
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3904 f->output_data.x->menubar_height = menubar_size;
11897
cbd3724a9696 (x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents: 11894
diff changeset
3905
16305
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3906 #ifndef USE_LUCID
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3907 /* Motif seems to need this amount added to the sizes
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3908 specified for the shell widget. The Athena/Lucid widgets don't.
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3909 Both conclusions reached experimentally. -- rms. */
16305
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3910 XtVaGetValues (f->output_data.x->edit_widget, XtNinternalBorderWidth,
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3911 &extra_borders, NULL);
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3912 extra_borders *= 2;
00e57c8adaba (x_window): With Motif, double extra_borders.
Richard M. Stallman <rms@gnu.org>
parents: 16302
diff changeset
3913 #endif
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3914
11707
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3915 /* Convert our geometry parameters into a geometry string
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3916 and specify it.
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3917 Note that we do not specify here whether the position
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3918 is a user-specified or program-specified one.
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3919 We pass that information later, in x_wm_set_size_hints. */
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3920 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3921 int left = f->output_data.x->left_pos;
11707
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3922 int xneg = window_prompting & XNegative;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3923 int top = f->output_data.x->top_pos;
11707
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3924 int yneg = window_prompting & YNegative;
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3925 if (xneg)
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3926 left = -left;
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3927 if (yneg)
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3928 top = -top;
11893
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3929
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3930 if (window_prompting & USPosition)
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3931 sprintf (shell_position, "=%dx%d%c%d%c%d",
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3932 PIXEL_WIDTH (f) + extra_borders,
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3933 PIXEL_HEIGHT (f) + menubar_size + extra_borders,
11893
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3934 (xneg ? '-' : '+'), left,
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3935 (yneg ? '-' : '+'), top);
1f70ffad3d6d [USE_X_TOOLKIT] (x_window): Pass position to toolkit
Karl Heuer <kwzh@gnu.org>
parents: 11882
diff changeset
3936 else
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3937 sprintf (shell_position, "=%dx%d",
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3938 PIXEL_WIDTH (f) + extra_borders,
12190
e0abe30899a9 [USE_X_TOOLKIT] (x_window): If using Motif,
Karl Heuer <kwzh@gnu.org>
parents: 12111
diff changeset
3939 PIXEL_HEIGHT (f) + menubar_size + extra_borders);
11707
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3940 }
b0cb8129be58 [USE_X_TOOLKIT] (x_window): Always pass position in geometry.
Richard M. Stallman <rms@gnu.org>
parents: 11611
diff changeset
3941
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3942 len = strlen (shell_position) + 1;
17579
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3943 /* We don't free this because we don't know whether
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3944 it is safe to free it while the frame exists.
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3945 It isn't worth the trouble of arranging to free it
8dd146dbe737 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17556
diff changeset
3946 when the frame is deleted. */
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3947 tem = (char *) xmalloc (len);
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3948 strncpy (tem, shell_position, len);
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3949 XtSetArg (al[ac], XtNgeometry, tem); ac++;
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3950 XtSetValues (shell_widget, al, ac);
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3951 }
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
3952
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3953 XtManageChild (pane_widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3954 XtRealizeWidget (shell_widget);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3955
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
3956 FRAME_X_WINDOW (f) = XtWindow (frame_widget);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3957
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3958 validate_x_resource_name ();
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
3959
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3960 class_hints.res_name = (char *) SDATA (Vx_resource_name);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
3961 class_hints.res_class = (char *) SDATA (Vx_resource_class);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3962 XSetClassHint (FRAME_X_DISPLAY (f), XtWindow (shell_widget), &class_hints);
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3963
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3964 #ifdef HAVE_X_I18N
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3965 FRAME_XIC (f) = NULL;
29947
b7556fa4c05b (x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents: 29938
diff changeset
3966 #ifdef USE_XIM
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3967 create_frame_xic (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3968 #endif
29947
b7556fa4c05b (x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents: 29938
diff changeset
3969 #endif
13227
d8af44485b3c (x_window, both versions): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents: 13083
diff changeset
3970
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3971 f->output_data.x->wm_hints.input = True;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3972 f->output_data.x->wm_hints.flags |= InputHint;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3973 XSetWMHints (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
3974 &f->output_data.x->wm_hints);
7172
f9eeb75c2b76 (x_window) [USE_X_TOOLKIT]: Call XSetWMHints.
Richard M. Stallman <rms@gnu.org>
parents: 7040
diff changeset
3975
9703
85ac0e4030d4 (x_window): Pass new arg f to hack_wm_protocols.
Richard M. Stallman <rms@gnu.org>
parents: 9690
diff changeset
3976 hack_wm_protocols (f, shell_widget);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3977
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3978 #ifdef HACK_EDITRES
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3979 XtAddEventHandler (shell_widget, 0, True, _XEditResCheckMessages, 0);
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3980 #endif
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3981
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3982 /* Do a stupid property change to force the server to generate a
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
3983 PropertyNotify event so that the event_stream server timestamp will
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3984 be initialized to something relevant to the time we created the window.
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3985 */
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
3986 XChangeProperty (XtDisplay (frame_widget), XtWindow (frame_widget),
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3987 FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols,
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
3988 XA_ATOM, 32, PropModeAppend,
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3989 (unsigned char*) NULL, 0);
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
3990
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3991 /* Make all the standard events reach the Emacs frame. */
6059
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
3992 attributes.event_mask = STANDARD_EVENT_SET;
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3993
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3994 #ifdef HAVE_X_I18N
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3995 if (FRAME_XIC (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3996 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3997 /* XIM server might require some X events. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3998 unsigned long fevent = NoEventMask;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
3999 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4000 attributes.event_mask |= fevent;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4001 }
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4002 #endif /* HAVE_X_I18N */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4003
6059
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
4004 attribute_mask = CWEventMask;
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
4005 XChangeWindowAttributes (XtDisplay (shell_widget), XtWindow (shell_widget),
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
4006 attribute_mask, &attributes);
0021cbdc591b (x_window): Call XChangeWindowAttributes with the standard
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6011
diff changeset
4007
9231
eeb35369e536 (HACK_EDITRES): Declare if using X11R5.
Paul Reilly <pmr@pajato.com>
parents: 9182
diff changeset
4008 XtMapWidget (frame_widget);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4009
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4010 /* x_set_name normally ignores requests to set the name if the
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4011 requested name is the same as the current name. This is the one
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4012 place where that assumption isn't correct; f->name is set, but
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4013 the X server hasn't been told. */
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4014 {
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4015 Lisp_Object name;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4016 int explicit = f->explicit_name;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4017
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4018 f->explicit_name = 0;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4019 name = f->name;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4020 f->name = Qnil;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4021 x_set_name (f, name, explicit);
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4022 }
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4023
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4024 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4025 f->output_data.x->text_cursor);
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4026
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4027 UNBLOCK_INPUT;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4028
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4029 /* This is a no-op, except under Motif. Make sure main areas are
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4030 set to something reasonable, in case we get an error later. */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4031 lw_set_main_areas (pane_widget, 0, frame_widget);
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4032 }
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4033
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4034 #else /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4035 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4036 void
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4037 x_window (f)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4038 FRAME_PTR f;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4039 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4040 if (! xg_create_frame_widgets (f))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4041 error ("Unable to create window");
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4042 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4043
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4044 #else /*! USE_GTK */
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4045 /* Create and set up the X window for frame F. */
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4046
21846
486ac68ce051 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21779
diff changeset
4047 void
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4048 x_window (f)
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4049 struct frame *f;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4050
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4051 {
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4052 XClassHint class_hints;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4053 XSetWindowAttributes attributes;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4054 unsigned long attribute_mask;
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4055
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4056 attributes.background_pixel = f->output_data.x->background_pixel;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4057 attributes.border_pixel = f->output_data.x->border_pixel;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4058 attributes.bit_gravity = StaticGravity;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4059 attributes.backing_store = NotUseful;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4060 attributes.save_under = True;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4061 attributes.event_mask = STANDARD_EVENT_SET;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4062 attributes.colormap = FRAME_X_COLORMAP (f);
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4063 attribute_mask = (CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4064 | CWColormap);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4065
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4066 BLOCK_INPUT;
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
4067 FRAME_X_WINDOW (f)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4068 = XCreateWindow (FRAME_X_DISPLAY (f),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4069 f->output_data.x->parent_desc,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4070 f->output_data.x->left_pos,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4071 f->output_data.x->top_pos,
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4072 PIXEL_WIDTH (f), PIXEL_HEIGHT (f),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4073 f->output_data.x->border_width,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4074 CopyFromParent, /* depth */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4075 InputOutput, /* class */
28144
71ebba3566ec (X_I18N_INHIBITED): Don't define.
Gerd Moellmann <gerd@gnu.org>
parents: 28096
diff changeset
4076 FRAME_X_VISUAL (f),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4077 attribute_mask, &attributes);
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4078
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4079 #ifdef HAVE_X_I18N
29947
b7556fa4c05b (x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents: 29938
diff changeset
4080 #ifdef USE_XIM
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4081 create_frame_xic (f);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4082 if (FRAME_XIC (f))
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4083 {
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4084 /* XIM server might require some X events. */
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4085 unsigned long fevent = NoEventMask;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4086 XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4087 attributes.event_mask |= fevent;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4088 attribute_mask = CWEventMask;
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4089 XChangeWindowAttributes (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4090 attribute_mask, &attributes);
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4091 }
29947
b7556fa4c05b (x_window) [!USE_XIM]: Don't call create_frame_ic.
Gerd Moellmann <gerd@gnu.org>
parents: 29938
diff changeset
4092 #endif
27502
52e8cb1333f2 (xic_set_preeditarea): Take window parameter and
Gerd Moellmann <gerd@gnu.org>
parents: 27343
diff changeset
4093 #endif /* HAVE_X_I18N */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4094
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4095 validate_x_resource_name ();
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4096
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4097 class_hints.res_name = (char *) SDATA (Vx_resource_name);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4098 class_hints.res_class = (char *) SDATA (Vx_resource_class);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4099 XSetClassHint (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &class_hints);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4100
11897
cbd3724a9696 (x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents: 11894
diff changeset
4101 /* The menubar is part of the ordinary display;
cbd3724a9696 (x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents: 11894
diff changeset
4102 it does not count in addition to the height of the window. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4103 f->output_data.x->menubar_height = 0;
11897
cbd3724a9696 (x_window) [both versions]: Set menubar_height.
Karl Heuer <kwzh@gnu.org>
parents: 11894
diff changeset
4104
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
4105 /* This indicates that we use the "Passive Input" input model.
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
4106 Unless we do this, we don't get the Focus{In,Out} events that we
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
4107 need to draw the cursor correctly. Accursed bureaucrats.
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4108 XWhipsAndChains (FRAME_X_DISPLAY (f), IronMaiden, &TheRack); */
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
4109
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4110 f->output_data.x->wm_hints.input = True;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4111 f->output_data.x->wm_hints.flags |= InputHint;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4112 XSetWMHints (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4113 &f->output_data.x->wm_hints);
15081
ab8c81feacf9 (x_window) [! USE_X_TOOLKIT]: Initialize wm_hints.icon_pixmap.
Richard M. Stallman <rms@gnu.org>
parents: 15079
diff changeset
4114 f->output_data.x->wm_hints.icon_pixmap = None;
7860
26a1d7b2670b (x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents: 7802
diff changeset
4115
26a1d7b2670b (x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents: 7802
diff changeset
4116 /* Request "save yourself" and "delete window" commands from wm. */
26a1d7b2670b (x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents: 7802
diff changeset
4117 {
26a1d7b2670b (x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents: 7802
diff changeset
4118 Atom protocols[2];
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4119 protocols[0] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4120 protocols[1] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4121 XSetWMProtocols (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), protocols, 2);
7860
26a1d7b2670b (x_window): Request "save yourself" commands.
Richard M. Stallman <rms@gnu.org>
parents: 7802
diff changeset
4122 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4123
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4124 /* x_set_name normally ignores requests to set the name if the
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4125 requested name is the same as the current name. This is the one
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4126 place where that assumption isn't correct; f->name is set, but
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4127 the X server hasn't been told. */
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4128 {
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
4129 Lisp_Object name;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4130 int explicit = f->explicit_name;
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4131
6519
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
4132 f->explicit_name = 0;
22c56514eeb3 (x_set_frame_parameters, x_get_arg, x_window, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 6506
diff changeset
4133 name = f->name;
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4134 f->name = Qnil;
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4135 x_set_name (f, name, explicit);
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4136 }
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 771
diff changeset
4137
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4138 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4139 f->output_data.x->text_cursor);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4140
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4141 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4142
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
4143 if (FRAME_X_WINDOW (f) == 0)
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4144 error ("Unable to create window");
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4145 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4146
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4147 #endif /* not USE_GTK */
6790
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4148 #endif /* not USE_X_TOOLKIT */
ee8090b47ea6 (x_figure_window_size): Don't call x_calc_absolute_position.
Richard M. Stallman <rms@gnu.org>
parents: 6783
diff changeset
4149
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4150 /* Handle the icon stuff for this window. Perhaps later we might
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4151 want an x_set_icon_position which can be called interactively as
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4152 well. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4153
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4154 static void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4155 x_icon (f, parms)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4156 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4157 Lisp_Object parms;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4158 {
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4159 Lisp_Object icon_x, icon_y;
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
4160 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4161
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4162 /* Set the position of the icon. Note that twm groups all
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4163 icons in an icon window. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4164 icon_x = x_get_and_record_arg (f, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4165 icon_y = x_get_and_record_arg (f, parms, Qicon_top, 0, 0, RES_TYPE_NUMBER);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4166 if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4167 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
4168 CHECK_NUMBER (icon_x);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
4169 CHECK_NUMBER (icon_y);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4170 }
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4171 else if (!EQ (icon_x, Qunbound) || !EQ (icon_y, Qunbound))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4172 error ("Both left and top icon corners of icon must be specified");
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4173
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4174 BLOCK_INPUT;
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4175
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
4176 if (! EQ (icon_x, Qunbound))
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
4177 x_wm_set_icon_position (f, XINT (icon_x), XINT (icon_y));
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4178
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4179 /* Start up iconic or window? */
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
4180 x_wm_set_window_state
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4181 (f, (EQ (x_get_arg (dpyinfo, parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4182 Qicon)
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
4183 ? IconicState
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
4184 : NormalState));
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4185
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4186 x_text_icon (f, (char *) SDATA ((!NILP (f->icon_name)
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
4187 ? f->icon_name
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4188 : f->name)));
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
4189
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4190 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4191 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4192
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
4193 /* Make the GCs needed for this window, setting the
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4194 background, border and mouse colors; also create the
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4195 mouse cursor and the gray border tile. */
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4196
1018
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4197 static char cursor_bits[] =
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4198 {
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4203 };
5fd29acd3db7 * xfns.c (x_set_name): Take new argument EXPLICIT, instead of
Jim Blandy <jimb@redhat.com>
parents: 974
diff changeset
4204
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4205 static void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4206 x_make_gc (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4207 struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4208 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4209 XGCValues gc_values;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4210
2341
1982e2983822 * xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents: 2328
diff changeset
4211 BLOCK_INPUT;
1982e2983822 * xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents: 2328
diff changeset
4212
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
4213 /* Create the GCs of this frame.
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4214 Note that many default values are used. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4215
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4216 /* Normal video */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4217 gc_values.font = f->output_data.x->font->fid;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4218 gc_values.foreground = f->output_data.x->foreground_pixel;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4219 gc_values.background = f->output_data.x->background_pixel;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4220 gc_values.line_width = 0; /* Means 1 using fast algorithm. */
34321
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4221 f->output_data.x->normal_gc
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4222 = XCreateGC (FRAME_X_DISPLAY (f),
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4223 FRAME_X_WINDOW (f),
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4224 GCLineWidth | GCFont | GCForeground | GCBackground,
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4225 &gc_values);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4226
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4227 /* Reverse video style. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4228 gc_values.foreground = f->output_data.x->background_pixel;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4229 gc_values.background = f->output_data.x->foreground_pixel;
34321
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4230 f->output_data.x->reverse_gc
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4231 = XCreateGC (FRAME_X_DISPLAY (f),
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4232 FRAME_X_WINDOW (f),
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4233 GCFont | GCForeground | GCBackground | GCLineWidth,
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4234 &gc_values);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4235
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4236 /* Cursor has cursor-color background, background-color foreground. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4237 gc_values.foreground = f->output_data.x->background_pixel;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4238 gc_values.background = f->output_data.x->cursor_pixel;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4239 gc_values.fill_style = FillOpaqueStippled;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4240 gc_values.stipple
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4241 = XCreateBitmapFromData (FRAME_X_DISPLAY (f),
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4242 FRAME_X_DISPLAY_INFO (f)->root_window,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4243 cursor_bits, 16, 16);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4244 f->output_data.x->cursor_gc
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4245 = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4246 (GCFont | GCForeground | GCBackground
24905
2c79eecad64d (x_make_gc): Turn off GCStipple when setting up cursor_gc.
Richard M. Stallman <rms@gnu.org>
parents: 24677
diff changeset
4247 | GCFillStyle /* | GCStipple */ | GCLineWidth),
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4248 &gc_values);
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4249
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4250 /* Reliefs. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4251 f->output_data.x->white_relief.gc = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4252 f->output_data.x->black_relief.gc = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4253
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4254 /* Create the gray border tile used when the pointer is not in
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4255 the frame. Since this depends on the frame's pixel values,
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4256 this must be done on a per-frame basis. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4257 f->output_data.x->border_tile
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
4258 = (XCreatePixmapFromBitmapData
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4259 (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window,
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
4260 gray_bits, gray_width, gray_height,
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4261 f->output_data.x->foreground_pixel,
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4262 f->output_data.x->background_pixel,
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
4263 DefaultDepth (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f))));
2341
1982e2983822 * xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents: 2328
diff changeset
4264
1982e2983822 * xfns.c (x_make_gc): Don't forget to block X input around the
Jim Blandy <jimb@redhat.com>
parents: 2328
diff changeset
4265 UNBLOCK_INPUT;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4266 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4267
34321
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4268
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4269 /* Free what was was allocated in x_make_gc. */
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4270
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4271 void
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4272 x_free_gcs (f)
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4273 struct frame *f;
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4274 {
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4275 Display *dpy = FRAME_X_DISPLAY (f);
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4276
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4277 BLOCK_INPUT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4278
34321
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4279 if (f->output_data.x->normal_gc)
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4280 {
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4281 XFreeGC (dpy, f->output_data.x->normal_gc);
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4282 f->output_data.x->normal_gc = 0;
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4283 }
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4284
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4285 if (f->output_data.x->reverse_gc)
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4286 {
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4287 XFreeGC (dpy, f->output_data.x->reverse_gc);
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4288 f->output_data.x->reverse_gc = 0;
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4289 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4290
34321
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4291 if (f->output_data.x->cursor_gc)
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4292 {
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4293 XFreeGC (dpy, f->output_data.x->cursor_gc);
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4294 f->output_data.x->cursor_gc = 0;
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4295 }
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4296
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4297 if (f->output_data.x->border_tile)
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4298 {
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4299 XFreePixmap (dpy, f->output_data.x->border_tile);
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4300 f->output_data.x->border_tile = 0;
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4301 }
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4302
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4303 UNBLOCK_INPUT;
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4304 }
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4305
41ecc8525dbc (x_free_gcs): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 33994
diff changeset
4306
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4307 /* Handler for signals raised during x_create_frame and
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4308 x_create_top_frame. FRAME is the frame which is partially
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4309 constructed. */
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4310
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4311 static Lisp_Object
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4312 unwind_create_frame (frame)
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4313 Lisp_Object frame;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4314 {
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4315 struct frame *f = XFRAME (frame);
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4316
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4317 /* If frame is ``official'', nothing to do. */
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4318 if (!CONSP (Vframe_list) || !EQ (XCAR (Vframe_list), frame))
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4319 {
34895
53e52b3525bf Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents: 34662
diff changeset
4320 #if GLYPH_DEBUG
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4321 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4322 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4323
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4324 x_free_frame_resources (f);
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4325
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4326 /* Check that reference counts are indeed correct. */
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4327 xassert (dpyinfo->reference_count == dpyinfo_refcount);
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4328 xassert (dpyinfo->image_cache->refcount == image_cache_refcount);
34638
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
4329 return Qt;
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4330 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4331
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4332 return Qnil;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4333 }
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4334
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4335
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4336 DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4337 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4338 doc: /* Make a new X window, which is called a "frame" in Emacs terms.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4339 Returns an Emacs frame object.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4340 ALIST is an alist of frame parameters.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4341 If the parameters specify that the frame should not have a minibuffer,
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4342 and do not specify a specific minibuffer window to use,
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4343 then `default-minibuffer-frame' must be a frame whose minibuffer can
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4344 be shared by the new frame.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4345
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4346 This function is an internal primitive--use `make-frame' instead. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4347 (parms)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4348 Lisp_Object parms;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4349 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4350 struct frame *f;
6935
675e4ec5f14f (Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents: 6882
diff changeset
4351 Lisp_Object frame, tem;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4352 Lisp_Object name;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4353 int minibuffer_only = 0;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4354 long window_prompting = 0;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4355 int width, height;
46285
3f111801efb4 Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45968
diff changeset
4356 int count = SPECPDL_INDEX ();
15566
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4357 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4358 Lisp_Object display;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4359 struct x_display_info *dpyinfo = NULL;
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4360 Lisp_Object parent;
11774
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4361 struct kboard *kb;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4362
2999
33c820044087 (check_x): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2964
diff changeset
4363 check_x ();
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4364
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4365 /* Use this general default value to start with
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4366 until we know if this frame has a specified name. */
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4367 Vx_resource_name = Vinvocation_name;
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4368
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4369 display = x_get_arg (dpyinfo, parms, Qdisplay, 0, 0, RES_TYPE_STRING);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4370 if (EQ (display, Qunbound))
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4371 display = Qnil;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4372 dpyinfo = check_x_display_info (display);
11774
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4373 #ifdef MULTI_KBOARD
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4374 kb = dpyinfo->kboard;
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4375 #else
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4376 kb = &the_only_kboard;
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4377 #endif
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4378
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4379 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING);
9103
948e8acb6990 (x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9022
diff changeset
4380 if (!STRINGP (name)
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4381 && ! EQ (name, Qunbound)
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4382 && ! NILP (name))
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4383 error ("Invalid frame name--not a string or nil");
398
a60eafebd43f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 389
diff changeset
4384
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4385 if (STRINGP (name))
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4386 Vx_resource_name = name;
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
4387
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4388 /* See if parent window is specified. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4389 parent = x_get_arg (dpyinfo, parms, Qparent_id, NULL, NULL, RES_TYPE_NUMBER);
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4390 if (EQ (parent, Qunbound))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4391 parent = Qnil;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4392 if (! NILP (parent))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
4393 CHECK_NUMBER (parent);
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4394
15566
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4395 /* make_frame_without_minibuffer can run Lisp code and garbage collect. */
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4396 /* No need to protect DISPLAY because that's not used after passing
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4397 it to make_frame_without_minibuffer. */
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4398 frame = Qnil;
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4399 GCPRO4 (parms, parent, name, frame);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4400 tem = x_get_arg (dpyinfo, parms, Qminibuffer, "minibuffer", "Minibuffer",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4401 RES_TYPE_SYMBOL);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4402 if (EQ (tem, Qnone) || NILP (tem))
12011
854e396aabed (Fx_create_frame): Pass new arg to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11989
diff changeset
4403 f = make_frame_without_minibuffer (Qnil, kb, display);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4404 else if (EQ (tem, Qonly))
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4405 {
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4406 f = make_minibuffer_frame ();
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4407 minibuffer_only = 1;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4408 }
9103
948e8acb6990 (x_set_frame_parameters, x_set_menu_bar_lines, Fx_create_frame,
Karl Heuer <kwzh@gnu.org>
parents: 9022
diff changeset
4409 else if (WINDOWP (tem))
12011
854e396aabed (Fx_create_frame): Pass new arg to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11989
diff changeset
4410 f = make_frame_without_minibuffer (tem, kb, display);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4411 else
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4412 f = make_frame (1);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4413
15566
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4414 XSETFRAME (frame, f);
3d03a3fb8757 (Fx_create_frame): Gcpro parms, parent, and name.
Richard M. Stallman <rms@gnu.org>
parents: 15495
diff changeset
4415
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
4416 /* Note that X Windows does support scroll bars. */
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
4417 FRAME_CAN_HAVE_SCROLL_BARS (f) = 1;
1719
48f539ac6921 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1657
diff changeset
4418
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4419 f->output_method = output_x_window;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4420 f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output));
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4421 bzero (f->output_data.x, sizeof (struct x_output));
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4422 f->output_data.x->icon_bitmap = -1;
19026
db6728252ce2 (Fx_create_frame): Initialize fontset in output_data.
Richard M. Stallman <rms@gnu.org>
parents: 18947
diff changeset
4423 f->output_data.x->fontset = -1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4424 f->output_data.x->scroll_bar_foreground_pixel = -1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4425 f->output_data.x->scroll_bar_background_pixel = -1;
39619
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
4426 #ifdef USE_TOOLKIT_SCROLL_BARS
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
4427 f->output_data.x->scroll_bar_top_shadow_pixel = -1;
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
4428 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1;
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
4429 #endif /* USE_TOOLKIT_SCROLL_BARS */
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4430 record_unwind_protect (unwind_create_frame, frame);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4431
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
4432 f->icon_name
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4433 = x_get_arg (dpyinfo, parms, Qicon_name, "iconName", "Title",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4434 RES_TYPE_STRING);
12276
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
4435 if (! STRINGP (f->icon_name))
2e376a4397bc (x_report_frame_params, x_set_icon_type, x_set_icon_name)
Richard M. Stallman <rms@gnu.org>
parents: 12209
diff changeset
4436 f->icon_name = Qnil;
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
4437
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4438 FRAME_X_DISPLAY_INFO (f) = dpyinfo;
34895
53e52b3525bf Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents: 34662
diff changeset
4439 #if GLYPH_DEBUG
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4440 image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4441 dpyinfo_refcount = dpyinfo->reference_count;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4442 #endif /* GLYPH_DEBUG */
11014
634a98104921 (Fx_create_frame): set the frame's kboard member.
Karl Heuer <kwzh@gnu.org>
parents: 10920
diff changeset
4443 #ifdef MULTI_KBOARD
11774
0b5cb5170084 (Fx_create_frame): Pass kb to make_frame_without_minibuffer.
Karl Heuer <kwzh@gnu.org>
parents: 11772
diff changeset
4444 FRAME_KBOARD (f) = kb;
11014
634a98104921 (Fx_create_frame): set the frame's kboard member.
Karl Heuer <kwzh@gnu.org>
parents: 10920
diff changeset
4445 #endif
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4446
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4447 /* These colors will be set anyway later, but it's important
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4448 to get the color reference counts right, so initialize them! */
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4449 {
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4450 Lisp_Object black;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4451 struct gcpro gcpro1;
38345
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4452
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4453 /* Function x_decode_color can signal an error. Make
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4454 sure to initialize color slots so that we won't try
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4455 to free colors we haven't allocated. */
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4456 f->output_data.x->foreground_pixel = -1;
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4457 f->output_data.x->background_pixel = -1;
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4458 f->output_data.x->cursor_pixel = -1;
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4459 f->output_data.x->cursor_foreground_pixel = -1;
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4460 f->output_data.x->border_pixel = -1;
3238db7bdfef (Fx_create_frame): Initialize frame colors to -1,
Gerd Moellmann <gerd@gnu.org>
parents: 38183
diff changeset
4461 f->output_data.x->mouse_pixel = -1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4462
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4463 black = build_string ("black");
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4464 GCPRO1 (black);
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4465 f->output_data.x->foreground_pixel
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4466 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4467 f->output_data.x->background_pixel
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4468 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4469 f->output_data.x->cursor_pixel
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4470 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4471 f->output_data.x->cursor_foreground_pixel
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4472 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4473 f->output_data.x->border_pixel
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4474 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4475 f->output_data.x->mouse_pixel
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4476 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4477 UNGCPRO;
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4478 }
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
4479
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4480 /* Specify the parent under which to make this X window. */
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4481
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4482 if (!NILP (parent))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4483 {
18612
88efccff8970 Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18594
diff changeset
4484 f->output_data.x->parent_desc = (Window) XFASTINT (parent);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4485 f->output_data.x->explicit_parent = 1;
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4486 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4487 else
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4488 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4489 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window;
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4490 f->output_data.x->explicit_parent = 0;
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4491 }
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4492
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4493 /* Set the name; the functions to which we pass f expect the name to
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4494 be set. */
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4495 if (EQ (name, Qunbound) || NILP (name))
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4496 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4497 f->name = build_string (dpyinfo->x_id_name);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4498 f->explicit_name = 0;
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4499 }
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4500 else
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4501 {
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4502 f->name = name;
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4503 f->explicit_name = 1;
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4504 /* use the frame's title when getting resources for this frame. */
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4505 specbind (Qx_resource_name, name);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4506 }
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4507
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4508 /* Extract the window parameters from the supplied values
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4509 that are needed to determine window geometry. */
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4510 {
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4511 Lisp_Object font;
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4512
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4513 font = x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING);
18947
386d68191907 (Fx_create_frame): Don't fail to initialize `font'.
Richard M. Stallman <rms@gnu.org>
parents: 18893
diff changeset
4514
4150
e2e92cd737bf * xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents: 4146
diff changeset
4515 BLOCK_INPUT;
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4516 /* First, try whatever font the caller has specified. */
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4517 if (STRINGP (font))
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
4518 {
21555
0927f341e390 (x_set_font): Give 2nd arg nil to Fquery_fontset.
Kenichi Handa <handa@m17n.org>
parents: 21549
diff changeset
4519 tem = Fquery_fontset (font, Qnil);
17722
27df69e20b98 (Fx_create_frame): Delete code for handling the X
Kenichi Handa <handa@m17n.org>
parents: 17629
diff changeset
4520 if (STRINGP (tem))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4521 font = x_new_fontset (f, SDATA (tem));
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
4522 else
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4523 font = x_new_font (f, SDATA (font));
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
4524 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4525
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4526 /* Try out a font which we hope has bold and italic variations. */
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4527 if (!STRINGP (font))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4528 font = x_new_font (f, "-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4529 if (!STRINGP (font))
8270
1a0af0f4fb1d (Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents: 8192
diff changeset
4530 font = x_new_font (f, "-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-1");
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4531 if (! STRINGP (font))
8270
1a0af0f4fb1d (Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents: 8192
diff changeset
4532 font = x_new_font (f, "-*-*-medium-r-normal-*-*-140-*-*-c-*-iso8859-1");
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4533 if (! STRINGP (font))
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4534 /* This was formerly the first thing tried, but it finds too many fonts
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4535 and takes too long. */
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4536 font = x_new_font (f, "-*-*-medium-r-*-*-*-*-*-*-c-*-iso8859-1");
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4537 /* If those didn't work, look for something which will at least work. */
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4538 if (! STRINGP (font))
8270
1a0af0f4fb1d (Fx_create_frame): Use 140 as default font size.
Richard M. Stallman <rms@gnu.org>
parents: 8192
diff changeset
4539 font = x_new_font (f, "-*-fixed-*-*-*-*-*-140-*-*-c-*-iso8859-1");
4150
e2e92cd737bf * xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents: 4146
diff changeset
4540 UNBLOCK_INPUT;
e2e92cd737bf * xfns.c (Fx_create_frame): Block input around call to
Jim Blandy <jimb@redhat.com>
parents: 4146
diff changeset
4541 if (! STRINGP (font))
4259
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4542 font = build_string ("fixed");
085095792d99 (Fx_create_frame): Don't look for default font
Richard M. Stallman <rms@gnu.org>
parents: 4195
diff changeset
4543
17722
27df69e20b98 (Fx_create_frame): Delete code for handling the X
Kenichi Handa <handa@m17n.org>
parents: 17629
diff changeset
4544 x_default_parameter (f, parms, Qfont, font,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4545 "font", "Font", RES_TYPE_STRING);
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
4546 }
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4547
15720
f1549b7501af (Fx_create_frame): Do xlwmenu hack only if USE_LUCID.
Karl Heuer <kwzh@gnu.org>
parents: 15706
diff changeset
4548 #ifdef USE_LUCID
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
4549 /* Prevent lwlib/xlwmenu.c from crashing because of a bug
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
4550 whereby it fails to get any font. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4551 xlwmenu_default_font = f->output_data.x->font;
9808
4c43c9dbe130 (x_window): Make ibw 0 by default.
Richard M. Stallman <rms@gnu.org>
parents: 9742
diff changeset
4552 #endif
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
4553
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4554 x_default_parameter (f, parms, Qborder_width, make_number (2),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4555 "borderWidth", "BorderWidth", RES_TYPE_NUMBER);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4556
40715
221a78cc7b5f (Fx_create_frame): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 40700
diff changeset
4557 /* This defaults to 1 in order to match xterm. We recognize either
3923
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4558 internalBorderWidth or internalBorder (which is what xterm calls
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4559 it). */
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4560 if (NILP (Fassq (Qinternal_border_width, parms)))
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4561 {
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4562 Lisp_Object value;
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4563
17779
094e5efd262d (Fx_create_frame): Get X resources from the display
Richard M. Stallman <rms@gnu.org>
parents: 17722
diff changeset
4564 value = x_get_arg (dpyinfo, parms, Qinternal_border_width,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4565 "internalBorder", "internalBorder", RES_TYPE_NUMBER);
3923
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4566 if (! EQ (value, Qunbound))
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4567 parms = Fcons (Fcons (Qinternal_border_width, value),
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4568 parms);
cb16ebff1c44 * xfns.c (Fx_create_frame): Check for internalBorder resource, as
Jim Blandy <jimb@redhat.com>
parents: 3888
diff changeset
4569 }
16302
025b3dc7a6ba (Fx_create_frame): Default Qinternal_border_width to 1.
Richard M. Stallman <rms@gnu.org>
parents: 16254
diff changeset
4570 x_default_parameter (f, parms, Qinternal_border_width, make_number (1),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4571 "internalBorderWidth", "internalBorderWidth",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4572 RES_TYPE_NUMBER);
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
4573 x_default_parameter (f, parms, Qvertical_scroll_bars, Qleft,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4574 "verticalScrollBars", "ScrollBars",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4575 RES_TYPE_SYMBOL);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4576
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4577 /* Also do the stuff which must be set before the window exists. */
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4578 x_default_parameter (f, parms, Qforeground_color, build_string ("black"),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4579 "foreground", "Foreground", RES_TYPE_STRING);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4580 x_default_parameter (f, parms, Qbackground_color, build_string ("white"),
26808
d8a6c42deb4e Indentation fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 26729
diff changeset
4581 "background", "Background", RES_TYPE_STRING);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4582 x_default_parameter (f, parms, Qmouse_color, build_string ("black"),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4583 "pointerColor", "Foreground", RES_TYPE_STRING);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4584 x_default_parameter (f, parms, Qcursor_color, build_string ("black"),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4585 "cursorColor", "Foreground", RES_TYPE_STRING);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4586 x_default_parameter (f, parms, Qborder_color, build_string ("black"),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4587 "borderColor", "BorderColor", RES_TYPE_STRING);
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
4588 x_default_parameter (f, parms, Qscreen_gamma, Qnil,
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
4589 "screenGamma", "ScreenGamma", RES_TYPE_FLOAT);
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
4590 x_default_parameter (f, parms, Qline_spacing, Qnil,
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
4591 "lineSpacing", "LineSpacing", RES_TYPE_NUMBER);
41722
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
4592 x_default_parameter (f, parms, Qleft_fringe, Qnil,
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
4593 "leftFringe", "LeftFringe", RES_TYPE_NUMBER);
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
4594 x_default_parameter (f, parms, Qright_fringe, Qnil,
fd499c5c75d2 (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
Kim F. Storm <storm@cua.dk>
parents: 41449
diff changeset
4595 "rightFringe", "RightFringe", RES_TYPE_NUMBER);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4596
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4597 x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_foreground,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4598 "scrollBarForeground",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4599 "ScrollBarForeground", 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4600 x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_background,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4601 "scrollBarBackground",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4602 "ScrollBarBackground", 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4603
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4604 /* Init faces before x_default_parameter is called for scroll-bar
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4605 parameters because that function calls x_set_scroll_bar_width,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4606 which calls change_frame_size, which calls Fset_window_buffer,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4607 which runs hooks, which call Fvertical_motion. At the end, we
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4608 end up in init_iterator with a null face cache, which should not
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4609 happen. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4610 init_frame_faces (f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4611
8758
fac1c4722677 (Fx_create_frame): Make 1 the default for menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 8675
diff changeset
4612 x_default_parameter (f, parms, Qmenu_bar_lines, make_number (1),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4613 "menuBar", "MenuBar", RES_TYPE_NUMBER);
31824
b3295c7e7a60 (Fx_create_frame): Set default frame parameter value
Gerd Moellmann <gerd@gnu.org>
parents: 31768
diff changeset
4614 x_default_parameter (f, parms, Qtool_bar_lines, make_number (1),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4615 "toolBar", "ToolBar", RES_TYPE_NUMBER);
13083
16638ebb209f (Fx_create_frame): Set up buffer-predicate slot.
Richard M. Stallman <rms@gnu.org>
parents: 12832
diff changeset
4616 x_default_parameter (f, parms, Qbuffer_predicate, Qnil,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4617 "bufferPredicate", "BufferPredicate",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4618 RES_TYPE_SYMBOL);
14381
4d038c841cf4 (Qtitle): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
4619 x_default_parameter (f, parms, Qtitle, Qnil,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4620 "title", "Title", RES_TYPE_STRING);
38183
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
4621 x_default_parameter (f, parms, Qwait_for_wm, Qt,
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
4622 "waitForWM", "WaitForWM", RES_TYPE_BOOLEAN);
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
4623 x_default_parameter (f, parms, Qfullscreen, Qnil,
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
4624 "fullscreen", "Fullscreen", RES_TYPE_SYMBOL);
6882
3096a6f7fffb (Fx_list_fonts): Error if non-X frame used.
Richard M. Stallman <rms@gnu.org>
parents: 6790
diff changeset
4625
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4626 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window;
36459
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4627
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4628 /* Add the tool-bar height to the initial frame height so that the
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4629 user gets a text display area of the size he specified with -g or
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4630 via .Xdefaults. Later changes of the tool-bar height don't
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4631 change the frame size. This is done so that users can create
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4632 tall Emacs frames without having to guess how tall the tool-bar
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4633 will get. */
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4634 if (FRAME_TOOL_BAR_LINES (f))
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4635 {
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4636 int margin, relief, bar_height;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4637
41087
cec842fa938e (Fx_create_frame): Accept zero tool_bar_button_relief.
Gerd Moellmann <gerd@gnu.org>
parents: 40802
diff changeset
4638 relief = (tool_bar_button_relief >= 0
36459
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4639 ? tool_bar_button_relief
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4640 : DEFAULT_TOOL_BAR_BUTTON_RELIEF);
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4641
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4642 if (INTEGERP (Vtool_bar_button_margin)
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4643 && XINT (Vtool_bar_button_margin) > 0)
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4644 margin = XFASTINT (Vtool_bar_button_margin);
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4645 else if (CONSP (Vtool_bar_button_margin)
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4646 && INTEGERP (XCDR (Vtool_bar_button_margin))
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4647 && XINT (XCDR (Vtool_bar_button_margin)) > 0)
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4648 margin = XFASTINT (XCDR (Vtool_bar_button_margin));
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4649 else
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4650 margin = 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4651
36459
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4652 bar_height = DEFAULT_TOOL_BAR_IMAGE_HEIGHT + 2 * margin + 2 * relief;
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4653 f->height += (bar_height + CANON_Y_UNIT (f) - 1) / CANON_Y_UNIT (f);
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4654 }
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4655
919d77f8d0ff (Fx_create_frame): Adjust the frame's height for presence
Gerd Moellmann <gerd@gnu.org>
parents: 36448
diff changeset
4656 /* Compute the size of the X window. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4657 window_prompting = x_figure_window_size (f, parms);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4658
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4659 if (window_prompting & XNegative)
6935
675e4ec5f14f (Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents: 6882
diff changeset
4660 {
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4661 if (window_prompting & YNegative)
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4662 f->output_data.x->win_gravity = SouthEastGravity;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4663 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4664 f->output_data.x->win_gravity = NorthEastGravity;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4665 }
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4666 else
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4667 {
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4668 if (window_prompting & YNegative)
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4669 f->output_data.x->win_gravity = SouthWestGravity;
7261
a752899939f7 (x_figure_window_size): Handle `-' for top or left.
Richard M. Stallman <rms@gnu.org>
parents: 7251
diff changeset
4670 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4671 f->output_data.x->win_gravity = NorthWestGravity;
6935
675e4ec5f14f (Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents: 6882
diff changeset
4672 }
675e4ec5f14f (Fx_create_frame): Delete excess args to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents: 6882
diff changeset
4673
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4674 f->output_data.x->size_hint_flags = window_prompting;
7263
b7025b4bf659 (Fx_create_frame): Set the size_hint_flags field.
Richard M. Stallman <rms@gnu.org>
parents: 7261
diff changeset
4675
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4676 tem = x_get_arg (dpyinfo, parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4677 f->no_split = minibuffer_only || EQ (tem, Qt);
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4678
35733
4f422aadd415 (Fx_create_frame): Add the tool bar height to the frame
Gerd Moellmann <gerd@gnu.org>
parents: 35592
diff changeset
4679 /* Create the X widget or window. */
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
4680 #ifdef USE_X_TOOLKIT
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
4681 x_window (f, window_prompting, minibuffer_only);
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
4682 #else
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4683 x_window (f);
6604
bb11213734d6 (x_window) [USE_X_TOOLKIT]: New args window_prompting and minibuffer_only.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6523
diff changeset
4684 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4685
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4686 x_icon (f, parms);
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4687 x_make_gc (f);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4688
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4689 /* Now consider the frame official. */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4690 FRAME_X_DISPLAY_INFO (f)->reference_count++;
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4691 Vframe_list = Fcons (frame, Vframe_list);
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4692
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4693 /* We need to do this after creating the X window, so that the
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4694 icon-creation functions can say whose icon they're describing. */
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4695 x_default_parameter (f, parms, Qicon_type, Qnil,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4696 "bitmapIcon", "BitmapIcon", RES_TYPE_SYMBOL);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4697
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4698 x_default_parameter (f, parms, Qauto_raise, Qnil,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4699 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN);
1786
5179baee010b * xfns.c (Fx_create_frame): After mapping the frame, call
Jim Blandy <jimb@redhat.com>
parents: 1733
diff changeset
4700 x_default_parameter (f, parms, Qauto_lower, Qnil,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4701 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
4702 x_default_parameter (f, parms, Qcursor_type, Qbox,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4703 "cursorType", "CursorType", RES_TYPE_SYMBOL);
26978
06f887a1c834 (Fx_create_frame): Move x_default_parameter calls that
Gerd Moellmann <gerd@gnu.org>
parents: 26954
diff changeset
4704 x_default_parameter (f, parms, Qscroll_bar_width, Qnil,
06f887a1c834 (Fx_create_frame): Move x_default_parameter calls that
Gerd Moellmann <gerd@gnu.org>
parents: 26954
diff changeset
4705 "scrollBarWidth", "ScrollBarWidth",
06f887a1c834 (Fx_create_frame): Move x_default_parameter calls that
Gerd Moellmann <gerd@gnu.org>
parents: 26954
diff changeset
4706 RES_TYPE_NUMBER);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
4707
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4708 /* Dimensions, especially f->height, must be done via change_frame_size.
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4709 Change will not be effected unless different from the current
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4710 f->height. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4711 width = f->width;
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4712 height = f->height;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4713
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
4714 f->height = 0;
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
4715 SET_FRAME_WIDTH (f, 0);
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
4716 change_frame_size (f, height, width, 1, 0, 0);
2136
17ab6ed0f98b (x_frame_parms): Add elts for visibility and menu-bar-lines.
Richard M. Stallman <rms@gnu.org>
parents: 2067
diff changeset
4717
33994
c7396fdd8d6b (Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents: 33960
diff changeset
4718 /* Set up faces after all frame parameters are known. This call
c7396fdd8d6b (Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents: 33960
diff changeset
4719 also merges in face attributes specified for new frames. If we
c7396fdd8d6b (Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents: 33960
diff changeset
4720 don't do this, the `menu' face for instance won't have the right
c7396fdd8d6b (Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents: 33960
diff changeset
4721 colors, and the menu bar won't appear in the specified colors for
c7396fdd8d6b (Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents: 33960
diff changeset
4722 new frames. */
c7396fdd8d6b (Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents: 33960
diff changeset
4723 call1 (Qface_set_after_frame_default, frame);
c7396fdd8d6b (Fx_create_frame): Reintroduce the call to
Gerd Moellmann <gerd@gnu.org>
parents: 33960
diff changeset
4724
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4725 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4726 /* Create the menu bar. */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4727 if (!minibuffer_only && FRAME_EXTERNAL_MENU_BAR (f))
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4728 {
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4729 /* If this signals an error, we haven't set size hints for the
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4730 frame and we didn't make it visible. */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4731 initialize_frame_menubar (f);
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4732
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4733 #ifndef USE_GTK
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4734 /* This is a no-op, except under Motif where it arranges the
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4735 main window for the widgets on it. */
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4736 lw_set_main_areas (f->output_data.x->column_widget,
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4737 f->output_data.x->menubar_widget,
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4738 f->output_data.x->edit_widget);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4739 #endif /* not USE_GTK */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4740 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4741 #endif /* USE_X_TOOLKIT || USE_GTK */
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4742
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4743 /* Tell the server what size and position, etc, we want, and how
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4744 badly we want them. This should be done after we have the menu
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4745 bar so that its size can be taken into account. */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4746 BLOCK_INPUT;
7209
ca5e04c9795c (Fx_create_frame): Pass 0 as 3rd arg to x_wm_set_size_hint.
Richard M. Stallman <rms@gnu.org>
parents: 7172
diff changeset
4747 x_wm_set_size_hint (f, window_prompting, 0);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4748 UNBLOCK_INPUT;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4749
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4750 /* Make the window appear on the frame and enable display, unless
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4751 the caller says not to. However, with explicit parent, Emacs
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4752 cannot control visibility, so don't try. */
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
4753 if (! f->output_data.x->explicit_parent)
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4754 {
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4755 Lisp_Object visibility;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4756
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4757 visibility = x_get_arg (dpyinfo, parms, Qvisibility, 0, 0,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
4758 RES_TYPE_SYMBOL);
10222
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4759 if (EQ (visibility, Qunbound))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4760 visibility = Qt;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4761
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4762 if (EQ (visibility, Qicon))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4763 x_iconify_frame (f);
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4764 else if (! NILP (visibility))
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4765 x_make_frame_visible (f);
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4766 else
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4767 /* Must have been Qnil. */
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4768 ;
617bee0c64f6 (x_set_frame_parameters): Handle icon-left, icon-top parms.
Richard M. Stallman <rms@gnu.org>
parents: 10080
diff changeset
4769 }
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
4770
25320
107c9221181c (x_window) [USE_X_TOOLKIT]: Remove test for
Gerd Moellmann <gerd@gnu.org>
parents: 25289
diff changeset
4771 UNGCPRO;
36594
756c28377036 (Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents: 36459
diff changeset
4772
756c28377036 (Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents: 36459
diff changeset
4773 /* Make sure windows on this frame appear in calls to next-window
756c28377036 (Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents: 36459
diff changeset
4774 and similar functions. */
756c28377036 (Fx_create_frame): Clear Vwindow_list.
Gerd Moellmann <gerd@gnu.org>
parents: 36459
diff changeset
4775 Vwindow_list = Qnil;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4776
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
4777 return unbind_to (count, frame);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4778 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4779
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
4780
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4781 /* FRAME is used only to get a handle on the X display. We don't pass the
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4782 display info directly because we're called from frame.c, which doesn't
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4783 know about that structure. */
16156
d435199e529d (x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents: 16041
diff changeset
4784
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4785 Lisp_Object
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4786 x_get_focus_frame (frame)
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4787 struct frame *frame;
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4788 {
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4789 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (frame);
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4790 Lisp_Object xfocus;
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4791 if (! dpyinfo->x_focus_frame)
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4792 return Qnil;
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4793
11537
9d4df3cf95b3 (x_get_focus_frame): New arg FRAME. Callers changed.
Karl Heuer <kwzh@gnu.org>
parents: 11496
diff changeset
4794 XSETFRAME (xfocus, dpyinfo->x_focus_frame);
6485
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4795 return xfocus;
b0825eef18b1 (x_get_focus_frame): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6480
diff changeset
4796 }
3048
96ff8e5744b2 * xfns.c (select_visual): Include the screen number in the
Jim Blandy <jimb@redhat.com>
parents: 3015
diff changeset
4797
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4798
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4799 /* In certain situations, when the window manager follows a
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4800 click-to-focus policy, there seems to be no way around calling
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4801 XSetInputFocus to give another frame the input focus .
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4802
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4803 In an ideal world, XSetInputFocus should generally be avoided so
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4804 that applications don't interfere with the window manager's focus
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4805 policy. But I think it's okay to use when it's clearly done
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4806 following a user-command. */
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4807
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4808 DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4809 doc: /* Set the input focus to FRAME.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4810 FRAME nil means use the selected frame. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4811 (frame)
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4812 Lisp_Object frame;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4813 {
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4814 struct frame *f = check_x_frame (frame);
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4815 Display *dpy = FRAME_X_DISPLAY (f);
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4816 int count;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4817
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4818 BLOCK_INPUT;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4819 count = x_catch_errors (dpy);
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4820 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4821 RevertToParent, CurrentTime);
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4822 x_uncatch_errors (dpy, count);
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4823 UNBLOCK_INPUT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4824
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4825 return Qnil;
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4826 }
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
4827
3048
96ff8e5744b2 * xfns.c (select_visual): Include the screen number in the
Jim Blandy <jimb@redhat.com>
parents: 3015
diff changeset
4828
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4829 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4830 doc: /* Internal function called by `color-defined-p', which see. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4831 (color, frame)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4832 Lisp_Object color, frame;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4833 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4834 XColor foo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4835 FRAME_PTR f = check_x_frame (frame);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4836
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
4837 CHECK_STRING (color);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4838
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4839 if (x_defined_color (f, SDATA (color), &foo, 0))
8675
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4840 return Qt;
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4841 else
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4842 return Qnil;
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4843 }
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4844
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4845 DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4846 doc: /* Internal function called by `color-values', which see. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4847 (color, frame)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4848 Lisp_Object color, frame;
8675
1fe413b0a916 (defined_color): New arg ALLOC--optionally don't allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 8655
diff changeset
4849 {
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4850 XColor foo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4851 FRAME_PTR f = check_x_frame (frame);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4852
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
4853 CHECK_STRING (color);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4854
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
4855 if (x_defined_color (f, SDATA (color), &foo, 0))
8655
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4856 {
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4857 Lisp_Object rgb[3];
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4858
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4859 rgb[0] = make_number (foo.red);
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4860 rgb[1] = make_number (foo.green);
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4861 rgb[2] = make_number (foo.blue);
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4862 return Flist (3, rgb);
4c69fcaaa037 (Fx_color_defined_p): Return list of RGB values, not just t.
Richard M. Stallman <rms@gnu.org>
parents: 8405
diff changeset
4863 }
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4864 else
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4865 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4866 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4867
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
4868 DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4869 doc: /* Internal function called by `display-color-p', which see. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4870 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4871 Lisp_Object display;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4872 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4873 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4874
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4875 if (dpyinfo->n_planes <= 2)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4876 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4877
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4878 switch (dpyinfo->visual->class)
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4879 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4880 case StaticColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4881 case PseudoColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4882 case TrueColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4883 case DirectColor:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4884 return Qt;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4885
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4886 default:
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4887 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4888 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4889 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4890
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4891 DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4892 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4893 doc: /* Return t if the X display supports shades of gray.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4894 Note that color displays do support shades of gray.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4895 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4896 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4897 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4898 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4899 Lisp_Object display;
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4900 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4901 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4902
12347
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4903 if (dpyinfo->n_planes <= 1)
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4904 return Qnil;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4905
12347
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4906 switch (dpyinfo->visual->class)
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4907 {
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4908 case StaticColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4909 case PseudoColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4910 case TrueColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4911 case DirectColor:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4912 case StaticGray:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4913 case GrayScale:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4914 return Qt;
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4915
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4916 default:
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4917 return Qnil;
0731c1ec96ad (Fx_display_grayscale_p): Return t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 12316
diff changeset
4918 }
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4919 }
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
4920
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4921 DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4922 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4923 doc: /* Returns the width in pixels of the X display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4924 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4925 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4926 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4927 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4928 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4929 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4930 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4931
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4932 return make_number (dpyinfo->width);
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4933 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4934
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4935 DEFUN ("x-display-pixel-height", Fx_display_pixel_height,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4936 Sx_display_pixel_height, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4937 doc: /* Returns the height in pixels of the X display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4938 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4939 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4940 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4941 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4942 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4943 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4944 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4945
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4946 return make_number (dpyinfo->height);
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4947 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4948
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4949 DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4950 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4951 doc: /* Returns the number of bitplanes of the X display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4952 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4953 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4954 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4955 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4956 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4957 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4958 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4959
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4960 return make_number (dpyinfo->n_planes);
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4961 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4962
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4963 DEFUN ("x-display-color-cells", Fx_display_color_cells, Sx_display_color_cells,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4964 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4965 doc: /* Returns the number of color cells of the X display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4966 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4967 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4968 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4969 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4970 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4971 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4972 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4973
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4974 return make_number (DisplayCells (dpyinfo->display,
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4975 XScreenNumberOfScreen (dpyinfo->screen)));
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4976 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4977
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4978 DEFUN ("x-server-max-request-size", Fx_server_max_request_size,
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4979 Sx_server_max_request_size,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4980 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4981 doc: /* Returns the maximum request size of the X server of display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4982 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4983 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4984 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4985 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4986 Lisp_Object display;
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4987 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4988 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4989
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
4990 return make_number (MAXREQUEST (dpyinfo->display));
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4991 }
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
4992
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
4993 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4994 doc: /* Returns the vendor ID string of the X server of display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4995 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
4996 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4997 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
4998 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
4999 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5000 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5001 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5002 char *vendor = ServerVendor (dpyinfo->display);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5003
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5004 if (! vendor) vendor = "";
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5005 return build_string (vendor);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5006 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5007
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5008 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5009 doc: /* Returns the version numbers of the X server of display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5010 The value is a list of three integers: the major and minor
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5011 version numbers of the X Protocol in use, and the vendor-specific release
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5012 number. See also the function `x-server-vendor'.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5013
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5014 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5015 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5016 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5017 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5018 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5019 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5020 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5021 Display *dpy = dpyinfo->display;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5022
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5023 return Fcons (make_number (ProtocolVersion (dpy)),
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5024 Fcons (make_number (ProtocolRevision (dpy)),
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5025 Fcons (make_number (VendorRelease (dpy)), Qnil)));
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5026 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5027
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5028 DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5029 doc: /* Return the number of screens on the X server of display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5030 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5031 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5032 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5033 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5034 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5035 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5036 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5037
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5038 return make_number (ScreenCount (dpyinfo->display));
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5039 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5040
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5041 DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5042 doc: /* Return the height in millimeters of the X display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5043 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5044 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5045 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5046 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5047 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5048 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5049 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5050
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5051 return make_number (HeightMMOfScreen (dpyinfo->screen));
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5052 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5053
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5054 DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5055 doc: /* Return the width in millimeters of the X display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5056 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5057 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5058 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5059 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5060 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5061 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5062 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5063
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5064 return make_number (WidthMMOfScreen (dpyinfo->screen));
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5065 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5066
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5067 DEFUN ("x-display-backing-store", Fx_display_backing_store,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5068 Sx_display_backing_store, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5069 doc: /* Returns an indication of whether X display DISPLAY does backing store.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5070 The value may be `always', `when-mapped', or `not-useful'.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5071 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5072 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5073 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5074 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5075 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5076 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5077 struct x_display_info *dpyinfo = check_x_display_info (display);
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5078 Lisp_Object result;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5079
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5080 switch (DoesBackingStore (dpyinfo->screen))
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5081 {
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5082 case Always:
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5083 result = intern ("always");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5084 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5085
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5086 case WhenMapped:
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5087 result = intern ("when-mapped");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5088 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5089
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5090 case NotUseful:
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5091 result = intern ("not-useful");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5092 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5093
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5094 default:
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5095 error ("Strange value for BackingStore parameter of screen");
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5096 result = Qnil;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5097 }
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5098
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5099 return result;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5100 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5101
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5102 DEFUN ("x-display-visual-class", Fx_display_visual_class,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5103 Sx_display_visual_class, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5104 doc: /* Return the visual class of the X display DISPLAY.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5105 The value is one of the symbols `static-gray', `gray-scale',
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5106 `static-color', `pseudo-color', `true-color', or `direct-color'.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5107
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5108 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5109 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5110 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5111 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5112 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5113 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5114 struct x_display_info *dpyinfo = check_x_display_info (display);
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5115 Lisp_Object result;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5116
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5117 switch (dpyinfo->visual->class)
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5118 {
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5119 case StaticGray:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5120 result = intern ("static-gray");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5121 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5122 case GrayScale:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5123 result = intern ("gray-scale");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5124 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5125 case StaticColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5126 result = intern ("static-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5127 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5128 case PseudoColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5129 result = intern ("pseudo-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5130 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5131 case TrueColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5132 result = intern ("true-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5133 break;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5134 case DirectColor:
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5135 result = intern ("direct-color");
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5136 break;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5137 default:
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5138 error ("Display has an unknown visual class");
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5139 result = Qnil;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5140 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5141
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
5142 return result;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5143 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5144
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5145 DEFUN ("x-display-save-under", Fx_display_save_under,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5146 Sx_display_save_under, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5147 doc: /* Returns t if the X display DISPLAY supports the save-under feature.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5148 The optional argument DISPLAY specifies which display to ask about.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5149 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5150 If omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5151 (display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5152 Lisp_Object display;
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5153 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5154 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5155
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5156 if (DoesSaveUnders (dpyinfo->screen) == True)
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5157 return Qt;
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5158 else
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5159 return Qnil;
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5160 }
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
5161
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5162 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5163 x_pixel_width (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5164 register struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5165 {
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5166 return PIXEL_WIDTH (f);
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5167 }
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5168
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5169 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5170 x_pixel_height (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5171 register struct frame *f;
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5172 {
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5173 return PIXEL_HEIGHT (f);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5174 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5175
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5176 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5177 x_char_width (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5178 register struct frame *f;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5179 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
5180 return FONT_WIDTH (f->output_data.x->font);
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5181 }
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5182
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5183 int
2067
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5184 x_char_height (f)
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5185 register struct frame *f;
0a353ddd4bf4 (Fx_pixel_width, Fx_pixel_height): Fns deleted.
Richard M. Stallman <rms@gnu.org>
parents: 1994
diff changeset
5186 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12656
diff changeset
5187 return f->output_data.x->line_height;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5188 }
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5189
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5190 int
19825
cdfaf8ce5208 (x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents: 19095
diff changeset
5191 x_screen_planes (f)
cdfaf8ce5208 (x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents: 19095
diff changeset
5192 register struct frame *f;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5193 {
19825
cdfaf8ce5208 (x_screen_planes): Fix type of argument.
Richard M. Stallman <rms@gnu.org>
parents: 19095
diff changeset
5194 return FRAME_X_DISPLAY_INFO (f)->n_planes;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5195 }
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
5196
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5197
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5198
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5199 /************************************************************************
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5200 X Displays
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5201 ************************************************************************/
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5202
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5203
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5204 /* Mapping visual names to visuals. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5205
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5206 static struct visual_class
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5207 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5208 char *name;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5209 int class;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5210 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5211 visual_classes[] =
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5212 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5213 {"StaticGray", StaticGray},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5214 {"GrayScale", GrayScale},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5215 {"StaticColor", StaticColor},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5216 {"PseudoColor", PseudoColor},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5217 {"TrueColor", TrueColor},
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5218 {"DirectColor", DirectColor},
42123
7f5f06b97bfc (x_frame_parms): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 42006
diff changeset
5219 {NULL, 0}
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5220 };
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5221
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5222
4606
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
5223 #ifndef HAVE_XSCREENNUMBEROFSCREEN
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5224
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5225 /* Value is the screen number of screen SCR. This is a substitute for
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5226 the X function with the same name when that doesn't exist. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5227
4606
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
5228 int
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
5229 XScreenNumberOfScreen (scr)
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
5230 register Screen *scr;
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
5231 {
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5232 Display *dpy = scr->display;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5233 int i;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5234
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5235 for (i = 0; i < dpy->nscreens; ++i)
40325
2eb0395c1697 (XScreenNumberOfScreen): Fix struct to pointer
Gerd Moellmann <gerd@gnu.org>
parents: 40279
diff changeset
5236 if (scr == dpy->screens + i)
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5237 break;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5238
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5239 return i;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5240 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5241
4606
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
5242 #endif /* not HAVE_XSCREENNUMBEROFSCREEN */
0866f021a2cc (XScreenNumberOfScreen): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4571
diff changeset
5243
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5244
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5245 /* Select the visual that should be used on display DPYINFO. Set
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5246 members of DPYINFO appropriately. Called from x_term_init. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5247
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5248 void
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5249 select_visual (dpyinfo)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5250 struct x_display_info *dpyinfo;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5251 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5252 Display *dpy = dpyinfo->display;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5253 Screen *screen = dpyinfo->screen;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5254 Lisp_Object value;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5255
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5256 /* See if a visual is specified. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5257 value = display_x_get_resource (dpyinfo,
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5258 build_string ("visualClass"),
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5259 build_string ("VisualClass"),
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5260 Qnil, Qnil);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5261 if (STRINGP (value))
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5262 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5263 /* VALUE should be of the form CLASS-DEPTH, where CLASS is one
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5264 of `PseudoColor', `TrueColor' etc. and DEPTH is the color
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5265 depth, a decimal number. NAME is compared with case ignored. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5266 char *s = (char *) alloca (SBYTES (value) + 1);
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5267 char *dash;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5268 int i, class = -1;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5269 XVisualInfo vinfo;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5270
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5271 strcpy (s, SDATA (value));
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5272 dash = index (s, '-');
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5273 if (dash)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5274 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5275 dpyinfo->n_planes = atoi (dash + 1);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5276 *dash = '\0';
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5277 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5278 else
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5279 /* We won't find a matching visual with depth 0, so that
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5280 an error will be printed below. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5281 dpyinfo->n_planes = 0;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5282
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5283 /* Determine the visual class. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5284 for (i = 0; visual_classes[i].name; ++i)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5285 if (xstricmp (s, visual_classes[i].name) == 0)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5286 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5287 class = visual_classes[i].class;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5288 break;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5289 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5290
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5291 /* Look up a matching visual for the specified class. */
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5292 if (class == -1
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5293 || !XMatchVisualInfo (dpy, XScreenNumberOfScreen (screen),
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5294 dpyinfo->n_planes, class, &vinfo))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5295 fatal ("Invalid visual specification `%s'", SDATA (value));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5296
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5297 dpyinfo->visual = vinfo.visual;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5298 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5299 else
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5300 {
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5301 int n_visuals;
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5302 XVisualInfo *vinfo, vinfo_template;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5303
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5304 dpyinfo->visual = DefaultVisualOfScreen (screen);
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
5305
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
5306 #ifdef HAVE_X11R4
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5307 vinfo_template.visualid = XVisualIDFromVisual (dpyinfo->visual);
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
5308 #else
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5309 vinfo_template.visualid = dpyinfo->visual->visualid;
1050
133bad38bde1 * xfns.c (x_icon): Don't call x_wm_set_icon_positions if the user
Jim Blandy <jimb@redhat.com>
parents: 1018
diff changeset
5310 #endif
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5311 vinfo_template.screen = XScreenNumberOfScreen (screen);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5312 vinfo = XGetVisualInfo (dpy, VisualIDMask | VisualScreenMask,
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5313 &vinfo_template, &n_visuals);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5314 if (n_visuals != 1)
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5315 fatal ("Can't get proper X visual info");
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5316
28199
56a776500341 * xfns.c (select_visual): Don't set dpyinfo->n_planes to the
Gerd Moellmann <gerd@gnu.org>
parents: 28144
diff changeset
5317 dpyinfo->n_planes = vinfo->depth;
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5318 XFree ((char *) vinfo);
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5319 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5320 }
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5321
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5322
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5323 /* Return the X display structure for the display named NAME.
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5324 Open a new connection if necessary. */
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5325
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5326 struct x_display_info *
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5327 x_display_info_for_name (name)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5328 Lisp_Object name;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5329 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5330 Lisp_Object names;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5331 struct x_display_info *dpyinfo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5332
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
5333 CHECK_STRING (name);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5334
12381
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
5335 if (! EQ (Vwindow_system, intern ("x")))
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
5336 error ("Not using X Windows");
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
5337
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5338 for (dpyinfo = x_display_list, names = x_display_name_list;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5339 dpyinfo;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
5340 dpyinfo = dpyinfo->next, names = XCDR (names))
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5341 {
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5342 Lisp_Object tem;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
5343 tem = Fstring_equal (XCAR (XCAR (names)), name);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5344 if (!NILP (tem))
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5345 return dpyinfo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5346 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5347
11917
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
5348 /* Use this general default value to start with. */
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
5349 Vx_resource_name = Vinvocation_name;
2314b62ca4ab (Fx_get_resource): Major rewrite to make it clearer.
Karl Heuer <kwzh@gnu.org>
parents: 11900
diff changeset
5350
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5351 validate_x_resource_name ();
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5352
34976
05c36b1fa618 (x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents: 34911
diff changeset
5353 dpyinfo = x_term_init (name, (char *)0,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5354 (char *) SDATA (Vx_resource_name));
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5355
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5356 if (dpyinfo == 0)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5357 error ("Cannot connect to X server %s", SDATA (name));
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5358
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5359 x_in_use = 1;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5360 XSETFASTINT (Vwindow_system_version, 11);
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5361
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5362 return dpyinfo;
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5363 }
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5364
27993
3a34e2d1bf3c (select_visual): Rewritten. Recognize user-specified
Gerd Moellmann <gerd@gnu.org>
parents: 27987
diff changeset
5365
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5366 DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection,
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5367 1, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5368 doc: /* Open a connection to an X server.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5369 DISPLAY is the name of the display to connect to.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5370 Optional second arg XRM-STRING is a string of resources in xrdb format.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5371 If the optional third arg MUST-SUCCEED is non-nil,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5372 terminate Emacs if we can't open the connection. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5373 (display, xrm_string, must_succeed)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5374 Lisp_Object display, xrm_string, must_succeed;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5375 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5376 unsigned char *xrm_option;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5377 struct x_display_info *dpyinfo;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5378
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
5379 CHECK_STRING (display);
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
5380 if (! NILP (xrm_string))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
5381 CHECK_STRING (xrm_string);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5382
12381
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
5383 if (! EQ (Vwindow_system, intern ("x")))
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
5384 error ("Not using X Windows");
67cb86bbdb55 (Fx_open_connection, x_display_info_for_name):
Richard M. Stallman <rms@gnu.org>
parents: 12347
diff changeset
5385
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
5386 if (! NILP (xrm_string))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5387 xrm_option = (unsigned char *) SDATA (xrm_string);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5388 else
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5389 xrm_option = (unsigned char *) 0;
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
5390
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
5391 validate_x_resource_name ();
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
5392
7802
d687e885fa6a (Fx_open_connection): Set up Vx_resource_name and xrm_option
Richard M. Stallman <rms@gnu.org>
parents: 7797
diff changeset
5393 /* This is what opens the connection and sets x_current_display.
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5394 This also initializes many symbols, such as those used for input. */
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5395 dpyinfo = x_term_init (display, xrm_option,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5396 (char *) SDATA (Vx_resource_name));
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5397
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5398 if (dpyinfo == 0)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5399 {
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5400 if (!NILP (must_succeed))
39907
c62141d21872 Fix multi-line string.
Gerd Moellmann <gerd@gnu.org>
parents: 39905
diff changeset
5401 fatal ("Cannot connect to X server %s.\n\
c62141d21872 Fix multi-line string.
Gerd Moellmann <gerd@gnu.org>
parents: 39905
diff changeset
5402 Check the DISPLAY environment variable or use `-d'.\n\
47159
23b87fbdd685 (Fx_open_connection): Fix docstring. Patch from Rune Kleveland <runekl@viewpoint.no>.
Juanma Barranquero <lekktu@gmail.com>
parents: 47142
diff changeset
5403 Also use the `xauth' program to verify that you have the proper\n\
23b87fbdd685 (Fx_open_connection): Fix docstring. Patch from Rune Kleveland <runekl@viewpoint.no>.
Juanma Barranquero <lekktu@gmail.com>
parents: 47142
diff changeset
5404 authorization information needed to connect the X server.\n\
47086
527c24dbb2b1 (Fx_open_connection): Improve help when X connection
Simon Josefsson <jas@extundo.com>
parents: 47058
diff changeset
5405 An insecure way to solve the problem may be to use `xhost'.\n",
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5406 SDATA (display));
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5407 else
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5408 error ("Cannot connect to X server %s", SDATA (display));
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5409 }
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5410
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5411 x_in_use = 1;
7802
d687e885fa6a (Fx_open_connection): Set up Vx_resource_name and xrm_option
Richard M. Stallman <rms@gnu.org>
parents: 7797
diff changeset
5412
9327
b3398cf56fba (Fx_open_connection): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9285
diff changeset
5413 XSETFASTINT (Vwindow_system_version, 11);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5414 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5415 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5416
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5417 DEFUN ("x-close-connection", Fx_close_connection,
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5418 Sx_close_connection, 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5419 doc: /* Close the connection to DISPLAY's X server.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5420 For DISPLAY, specify either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5421 If DISPLAY is nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5422 (display)
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5423 Lisp_Object display;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5424 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5425 struct x_display_info *dpyinfo = check_x_display_info (display);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5426 int i;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5427
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5428 if (dpyinfo->reference_count > 0)
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5429 error ("Display still has frames on it");
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5430
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5431 BLOCK_INPUT;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5432 /* Free the fonts in the font table. */
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5433 for (i = 0; i < dpyinfo->n_fonts; i++)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5434 if (dpyinfo->font_table[i].name)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5435 {
28229
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
5436 if (dpyinfo->font_table[i].name != dpyinfo->font_table[i].full_name)
5a0af67169a7 (Fx_create_frame): Don't cal fs_register_fontset.
Kenichi Handa <handa@m17n.org>
parents: 28199
diff changeset
5437 xfree (dpyinfo->font_table[i].full_name);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5438 xfree (dpyinfo->font_table[i].name);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5439 XFreeFont (dpyinfo->display, dpyinfo->font_table[i].font);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5440 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5441
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5442 x_destroy_all_bitmaps (dpyinfo);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5443 XSetCloseDownMode (dpyinfo->display, DestroyAll);
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5444
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5445 #ifdef USE_X_TOOLKIT
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5446 XtCloseDisplay (dpyinfo->display);
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5447 #else
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5448 XCloseDisplay (dpyinfo->display);
9742
fe7653791d28 (Fx_create_frame): Set xlwmenu_default_font.
Richard M. Stallman <rms@gnu.org>
parents: 9703
diff changeset
5449 #endif
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5450
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5451 x_delete_display (dpyinfo);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5452 UNBLOCK_INPUT;
8782
51241477cfc5 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8780
diff changeset
5453
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5454 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5455 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5456
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5457 DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5458 doc: /* Return the list of display names that Emacs has connections to. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5459 ()
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5460 {
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5461 Lisp_Object tail, result;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5462
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5463 result = Qnil;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
5464 for (tail = x_display_name_list; ! NILP (tail); tail = XCDR (tail))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25628
diff changeset
5465 result = Fcons (XCAR (XCAR (tail)), result);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5466
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5467 return result;
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5468 }
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5469
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5470 DEFUN ("x-synchronize", Fx_synchronize, Sx_synchronize, 1, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5471 doc: /* If ON is non-nil, report X errors as soon as the erring request is made.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5472 If ON is nil, allow buffering of requests.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5473 Turning on synchronization prohibits the Xlib routines from buffering
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5474 requests and seriously degrades performance, but makes debugging much
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5475 easier.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5476 The optional second argument DISPLAY specifies which display to act on.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5477 DISPLAY should be either a frame or a display name (a string).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5478 If DISPLAY is omitted or nil, that stands for the selected frame's display. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5479 (on, display)
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5480 Lisp_Object display, on;
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5481 {
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
5482 struct x_display_info *dpyinfo = check_x_display_info (display);
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5483
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5484 XSynchronize (dpyinfo->display, !EQ (on, Qnil));
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5485
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5486 return Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5487 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5488
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5489 /* Wait for responses to all X commands issued so far for frame F. */
5536
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5490
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5491 void
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5492 x_sync (f)
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5493 FRAME_PTR f;
5536
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5494 {
5558
42ec75481b8b (x_sync): Block input.
Richard M. Stallman <rms@gnu.org>
parents: 5536
diff changeset
5495 BLOCK_INPUT;
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
5496 XSync (FRAME_X_DISPLAY (f), False);
5558
42ec75481b8b (x_sync): Block input.
Richard M. Stallman <rms@gnu.org>
parents: 5536
diff changeset
5497 UNBLOCK_INPUT;
5536
f900f7bba4c2 (x_sync): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5429
diff changeset
5498 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5499
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5500
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5501 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5502 Image types
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5503 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5504
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5505 /* Value is the number of elements of vector VECTOR. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5506
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5507 #define DIM(VECTOR) (sizeof (VECTOR) / sizeof *(VECTOR))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5508
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5509 /* List of supported image types. Use define_image_type to add new
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5510 types. Use lookup_image_type to find a type for a given symbol. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5511
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5512 static struct image_type *image_types;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5513
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5514 /* The symbol `image' which is the car of the lists used to represent
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5515 images in Lisp. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5516
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5517 extern Lisp_Object Qimage;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5518
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5519 /* The symbol `xbm' which is used as the type symbol for XBM images. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5520
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5521 Lisp_Object Qxbm;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5522
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5523 /* Keywords. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5524
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
5525 extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile;
44068
85388a495f68 (QCtype): Remove duplicate declaration and
Kim F. Storm <storm@cua.dk>
parents: 43987
diff changeset
5526 extern Lisp_Object QCdata, QCtype;
85388a495f68 (QCtype): Remove duplicate declaration and
Kim F. Storm <storm@cua.dk>
parents: 43987
diff changeset
5527 Lisp_Object QCascent, QCmargin, QCrelief;
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
5528 Lisp_Object QCconversion, QCcolor_symbols, QCheuristic_mask;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5529 Lisp_Object QCindex, QCmatrix, QCcolor_adjustment, QCmask;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5530
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5531 /* Other symbols. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5532
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5533 Lisp_Object Qlaplace, Qemboss, Qedge_detection, Qheuristic;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5534
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5535 /* Time in seconds after which images should be removed from the cache
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5536 if not displayed. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5537
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
5538 Lisp_Object Vimage_cache_eviction_delay;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5539
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5540 /* Function prototypes. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5541
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5542 static void define_image_type P_ ((struct image_type *type));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5543 static struct image_type *lookup_image_type P_ ((Lisp_Object symbol));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5544 static void image_error P_ ((char *format, Lisp_Object, Lisp_Object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5545 static void x_laplace P_ ((struct frame *, struct image *));
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
5546 static void x_emboss P_ ((struct frame *, struct image *));
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
5547 static int x_build_heuristic_mask P_ ((struct frame *, struct image *,
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
5548 Lisp_Object));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5549
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5550
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5551 /* Define a new image type from TYPE. This adds a copy of TYPE to
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5552 image_types and adds the symbol *TYPE->type to Vimage_types. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5553
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5554 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5555 define_image_type (type)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5556 struct image_type *type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5557 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5558 /* Make a copy of TYPE to avoid a bus error in a dumped Emacs.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5559 The initialized data segment is read-only. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5560 struct image_type *p = (struct image_type *) xmalloc (sizeof *p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5561 bcopy (type, p, sizeof *p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5562 p->next = image_types;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5563 image_types = p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5564 Vimage_types = Fcons (*p->type, Vimage_types);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5565 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5566
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5567
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5568 /* Look up image type SYMBOL, and return a pointer to its image_type
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5569 structure. Value is null if SYMBOL is not a known image type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5570
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5571 static INLINE struct image_type *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5572 lookup_image_type (symbol)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5573 Lisp_Object symbol;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5574 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5575 struct image_type *type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5576
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5577 for (type = image_types; type; type = type->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5578 if (EQ (symbol, *type->type))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5579 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5580
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5581 return type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5582 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5583
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5584
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5585 /* Value is non-zero if OBJECT is a valid Lisp image specification. A
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5586 valid image specification is a list whose car is the symbol
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5587 `image', and whose rest is a property list. The property list must
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5588 contain a value for key `:type'. That value must be the name of a
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5589 supported image type. The rest of the property list depends on the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5590 image type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5591
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5592 int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5593 valid_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5594 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5595 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5596 int valid_p = 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5597
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5598 if (CONSP (object) && EQ (XCAR (object), Qimage))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5599 {
38542
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5600 Lisp_Object tem;
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5601
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5602 for (tem = XCDR (object); CONSP (tem); tem = XCDR (tem))
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5603 if (EQ (XCAR (tem), QCtype))
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5604 {
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5605 tem = XCDR (tem);
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5606 if (CONSP (tem) && SYMBOLP (XCAR (tem)))
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5607 {
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5608 struct image_type *type;
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5609 type = lookup_image_type (XCAR (tem));
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5610 if (type)
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5611 valid_p = type->valid_p (object);
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5612 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5613
38542
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5614 break;
27905f0c73b7 (valid_image_p): Protect better against invalid image
Gerd Moellmann <gerd@gnu.org>
parents: 38345
diff changeset
5615 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5616 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5617
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5618 return valid_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5619 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5620
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5621
25800
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5622 /* Log error message with format string FORMAT and argument ARG.
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5623 Signaling an error, e.g. when an image cannot be loaded, is not a
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5624 good idea because this would interrupt redisplay, and the error
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5625 message display would lead to another redisplay. This function
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5626 therefore simply displays a message. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5627
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5628 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5629 image_error (format, arg1, arg2)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5630 char *format;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5631 Lisp_Object arg1, arg2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5632 {
25800
609695887d08 (image_error): Use add_to_log.
Gerd Moellmann <gerd@gnu.org>
parents: 25715
diff changeset
5633 add_to_log (format, arg1, arg2);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5634 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5635
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5636
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5637
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5638 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5639 Image specifications
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5640 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5641
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5642 enum image_value_type
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5643 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5644 IMAGE_DONT_CHECK_VALUE_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5645 IMAGE_STRING_VALUE,
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
5646 IMAGE_STRING_OR_NIL_VALUE,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5647 IMAGE_SYMBOL_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5648 IMAGE_POSITIVE_INTEGER_VALUE,
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5649 IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5650 IMAGE_NON_NEGATIVE_INTEGER_VALUE,
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5651 IMAGE_ASCENT_VALUE,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5652 IMAGE_INTEGER_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5653 IMAGE_FUNCTION_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5654 IMAGE_NUMBER_VALUE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5655 IMAGE_BOOL_VALUE
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5656 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5657
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5658 /* Structure used when parsing image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5659
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5660 struct image_keyword
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5661 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5662 /* Name of keyword. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5663 char *name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5664
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5665 /* The type of value allowed. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5666 enum image_value_type type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5667
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5668 /* Non-zero means key must be present. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5669 int mandatory_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5670
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5671 /* Used to recognize duplicate keywords in a property list. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5672 int count;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5673
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5674 /* The value that was found. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5675 Lisp_Object value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5676 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5677
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5678
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5679 static int parse_image_spec P_ ((Lisp_Object, struct image_keyword *,
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5680 int, Lisp_Object));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5681 static Lisp_Object image_spec_value P_ ((Lisp_Object, Lisp_Object, int *));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5682
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5683
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5684 /* Parse image spec SPEC according to KEYWORDS. A valid image spec
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5685 has the format (image KEYWORD VALUE ...). One of the keyword/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5686 value pairs must be `:type TYPE'. KEYWORDS is a vector of
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5687 image_keywords structures of size NKEYWORDS describing other
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5688 allowed keyword/value pairs. Value is non-zero if SPEC is valid. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5689
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5690 static int
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5691 parse_image_spec (spec, keywords, nkeywords, type)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5692 Lisp_Object spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5693 struct image_keyword *keywords;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5694 int nkeywords;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5695 Lisp_Object type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5696 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5697 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5698 Lisp_Object plist;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5699
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5700 if (!CONSP (spec) || !EQ (XCAR (spec), Qimage))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5701 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5702
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5703 plist = XCDR (spec);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5704 while (CONSP (plist))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5705 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5706 Lisp_Object key, value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5707
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5708 /* First element of a pair must be a symbol. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5709 key = XCAR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5710 plist = XCDR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5711 if (!SYMBOLP (key))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5712 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5713
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5714 /* There must follow a value. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5715 if (!CONSP (plist))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5716 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5717 value = XCAR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5718 plist = XCDR (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5719
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5720 /* Find key in KEYWORDS. Error if not found. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5721 for (i = 0; i < nkeywords; ++i)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
5722 if (strcmp (keywords[i].name, SDATA (SYMBOL_NAME (key))) == 0)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5723 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5724
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5725 if (i == nkeywords)
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
5726 continue;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5727
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5728 /* Record that we recognized the keyword. If a keywords
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5729 was found more than once, it's an error. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5730 keywords[i].value = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5731 ++keywords[i].count;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5732
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5733 if (keywords[i].count > 1)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5734 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5735
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5736 /* Check type of value against allowed type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5737 switch (keywords[i].type)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5738 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5739 case IMAGE_STRING_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5740 if (!STRINGP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5741 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5742 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5743
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
5744 case IMAGE_STRING_OR_NIL_VALUE:
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
5745 if (!STRINGP (value) && !NILP (value))
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
5746 return 0;
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
5747 break;
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
5748
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5749 case IMAGE_SYMBOL_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5750 if (!SYMBOLP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5751 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5752 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5753
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5754 case IMAGE_POSITIVE_INTEGER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5755 if (!INTEGERP (value) || XINT (value) <= 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5756 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5757 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5758
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5759 case IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR:
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5760 if (INTEGERP (value) && XINT (value) >= 0)
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5761 break;
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5762 if (CONSP (value)
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5763 && INTEGERP (XCAR (value)) && INTEGERP (XCDR (value))
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5764 && XINT (XCAR (value)) >= 0 && XINT (XCDR (value)) >= 0)
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5765 break;
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5766 return 0;
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5767
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5768 case IMAGE_ASCENT_VALUE:
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5769 if (SYMBOLP (value) && EQ (value, Qcenter))
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5770 break;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5771 else if (INTEGERP (value)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5772 && XINT (value) >= 0
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5773 && XINT (value) <= 100)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5774 break;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5775 return 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5776
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5777 case IMAGE_NON_NEGATIVE_INTEGER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5778 if (!INTEGERP (value) || XINT (value) < 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5779 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5780 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5781
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5782 case IMAGE_DONT_CHECK_VALUE_TYPE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5783 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5784
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5785 case IMAGE_FUNCTION_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5786 value = indirect_function (value);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5787 if (SUBRP (value)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5788 || COMPILEDP (value)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5789 || (CONSP (value) && EQ (XCAR (value), Qlambda)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5790 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5791 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5792
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5793 case IMAGE_NUMBER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5794 if (!INTEGERP (value) && !FLOATP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5795 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5796 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5797
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5798 case IMAGE_INTEGER_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5799 if (!INTEGERP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5800 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5801 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5802
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5803 case IMAGE_BOOL_VALUE:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5804 if (!NILP (value) && !EQ (value, Qt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5805 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5806 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5807
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5808 default:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5809 abort ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5810 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5811 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5812
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5813 if (EQ (key, QCtype) && !EQ (type, value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5814 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5815 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5816
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5817 /* Check that all mandatory fields are present. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5818 for (i = 0; i < nkeywords; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5819 if (keywords[i].mandatory_p && keywords[i].count == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5820 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5821
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5822 return NILP (plist);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5823 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5824
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5825
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5826 /* Return the value of KEY in image specification SPEC. Value is nil
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5827 if KEY is not present in SPEC. if FOUND is not null, set *FOUND
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5828 to 1 if KEY was found in SPEC, set it to 0 otherwise. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5829
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5830 static Lisp_Object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5831 image_spec_value (spec, key, found)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5832 Lisp_Object spec, key;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5833 int *found;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5834 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5835 Lisp_Object tail;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5836
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5837 xassert (valid_image_p (spec));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5838
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5839 for (tail = XCDR (spec);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5840 CONSP (tail) && CONSP (XCDR (tail));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5841 tail = XCDR (XCDR (tail)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5842 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5843 if (EQ (XCAR (tail), key))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5844 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5845 if (found)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5846 *found = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5847 return XCAR (XCDR (tail));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5848 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5849 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5850
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5851 if (found)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5852 *found = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5853 return Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5854 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5855
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5856
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5857 DEFUN ("image-size", Fimage_size, Simage_size, 1, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5858 doc: /* Return the size of image SPEC as pair (WIDTH . HEIGHT).
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5859 PIXELS non-nil means return the size in pixels, otherwise return the
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5860 size in canonical character units.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5861 FRAME is the frame on which the image will be displayed. FRAME nil
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5862 or omitted means use the selected frame. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5863 (spec, pixels, frame)
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5864 Lisp_Object spec, pixels, frame;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5865 {
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5866 Lisp_Object size;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5867
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5868 size = Qnil;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5869 if (valid_image_p (spec))
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5870 {
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5871 struct frame *f = check_x_frame (frame);
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5872 int id = lookup_image (f, spec);
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5873 struct image *img = IMAGE_FROM_ID (f, id);
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5874 int width = img->width + 2 * img->hmargin;
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
5875 int height = img->height + 2 * img->vmargin;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5876
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5877 if (NILP (pixels))
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5878 size = Fcons (make_float ((double) width / CANON_X_UNIT (f)),
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5879 make_float ((double) height / CANON_Y_UNIT (f)));
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5880 else
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5881 size = Fcons (make_number (width), make_number (height));
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5882 }
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5883 else
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5884 error ("Invalid image specification");
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5885
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5886 return size;
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5887 }
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
5888
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5889
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5890 DEFUN ("image-mask-p", Fimage_mask_p, Simage_mask_p, 1, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5891 doc: /* Return t if image SPEC has a mask bitmap.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
5892 FRAME is the frame on which the image will be displayed. FRAME nil
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5893 or omitted means use the selected frame. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
5894 (spec, frame)
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5895 Lisp_Object spec, frame;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5896 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5897 Lisp_Object mask;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5898
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5899 mask = Qnil;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5900 if (valid_image_p (spec))
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5901 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5902 struct frame *f = check_x_frame (frame);
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
5903 int id = lookup_image (f, spec);
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5904 struct image *img = IMAGE_FROM_ID (f, id);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5905 if (img->mask)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5906 mask = Qt;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5907 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5908 else
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5909 error ("Invalid image specification");
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5910
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5911 return mask;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5912 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5913
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
5914
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5915
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5916 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5917 Image type independent image structures
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5918 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5919
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5920 static struct image *make_image P_ ((Lisp_Object spec, unsigned hash));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5921 static void free_image P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5922
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5923
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5924 /* Allocate and return a new image structure for image specification
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5925 SPEC. SPEC has a hash value of HASH. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5926
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5927 static struct image *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5928 make_image (spec, hash)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5929 Lisp_Object spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5930 unsigned hash;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5931 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5932 struct image *img = (struct image *) xmalloc (sizeof *img);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5933
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5934 xassert (valid_image_p (spec));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5935 bzero (img, sizeof *img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5936 img->type = lookup_image_type (image_spec_value (spec, QCtype, NULL));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5937 xassert (img->type != NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5938 img->spec = spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5939 img->data.lisp_val = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5940 img->ascent = DEFAULT_IMAGE_ASCENT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5941 img->hash = hash;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5942 return img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5943 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5944
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5945
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5946 /* Free image IMG which was used on frame F, including its resources. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5947
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5948 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5949 free_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5950 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5951 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5952 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5953 if (img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5954 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5955 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5956
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5957 /* Remove IMG from the hash table of its cache. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5958 if (img->prev)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5959 img->prev->next = img->next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5960 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5961 c->buckets[img->hash % IMAGE_CACHE_BUCKETS_SIZE] = img->next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5962
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5963 if (img->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5964 img->next->prev = img->prev;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5965
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5966 c->images[img->id] = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5967
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5968 /* Free resources, then free IMG. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5969 img->type->free (f, img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5970 xfree (img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5971 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5972 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5973
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5974
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5975 /* Prepare image IMG for display on frame F. Must be called before
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5976 drawing an image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5977
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5978 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5979 prepare_image_for_display (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5980 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5981 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5982 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5983 EMACS_TIME t;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5984
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5985 /* We're about to display IMG, so set its timestamp to `now'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5986 EMACS_GET_TIME (t);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5987 img->timestamp = EMACS_SECS (t);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5988
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5989 /* If IMG doesn't have a pixmap yet, load it now, using the image
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5990 type dependent loader function. */
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
5991 if (img->pixmap == None && !img->load_failed_p)
25955
3daaee890b1e (prepare_image_for_display): Don't try to load image if
Gerd Moellmann <gerd@gnu.org>
parents: 25817
diff changeset
5992 img->load_failed_p = img->type->load (f, img) == 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5993 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5994
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
5995
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5996 /* Value is the number of pixels for the ascent of image IMG when
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5997 drawn in face FACE. */
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5998
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
5999 int
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6000 image_ascent (img, face)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6001 struct image *img;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6002 struct face *face;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6003 {
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6004 int height = img->height + img->vmargin;
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6005 int ascent;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6006
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6007 if (img->ascent == CENTERED_IMAGE_ASCENT)
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6008 {
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6009 if (face->font)
32160
0abb3c153331 (image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents: 31999
diff changeset
6010 /* This expression is arranged so that if the image can't be
0abb3c153331 (image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents: 31999
diff changeset
6011 exactly centered, it will be moved slightly up. This is
0abb3c153331 (image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents: 31999
diff changeset
6012 because a typical font is `top-heavy' (due to the presence
0abb3c153331 (image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents: 31999
diff changeset
6013 uppercase letters), so the image placement should err towards
0abb3c153331 (image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents: 31999
diff changeset
6014 being top-heavy too. It also just generally looks better. */
0abb3c153331 (image_ascent): Rearrange ascent calculation for the has-a-font case.
Miles Bader <miles@gnu.org>
parents: 31999
diff changeset
6015 ascent = (height + face->font->ascent - face->font->descent + 1) / 2;
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6016 else
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6017 ascent = height / 2;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6018 }
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6019 else
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6020 ascent = height * img->ascent / 100.0;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6021
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6022 return ascent;
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6023 }
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6024
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6025
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6026 /* Image background colors. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6027
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6028 static unsigned long
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6029 four_corners_best (ximg, width, height)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6030 XImage *ximg;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6031 unsigned long width, height;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6032 {
40606
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6033 unsigned long corners[4], best;
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6034 int i, best_count;
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6035
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6036 /* Get the colors at the corners of ximg. */
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6037 corners[0] = XGetPixel (ximg, 0, 0);
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6038 corners[1] = XGetPixel (ximg, width - 1, 0);
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6039 corners[2] = XGetPixel (ximg, width - 1, height - 1);
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6040 corners[3] = XGetPixel (ximg, 0, height - 1);
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6041
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6042 /* Choose the most frequently found color as background. */
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6043 for (i = best_count = 0; i < 4; ++i)
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6044 {
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6045 int j, n;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6046
40606
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6047 for (j = n = 0; j < 4; ++j)
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6048 if (corners[i] == corners[j])
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6049 ++n;
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6050
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6051 if (n > best_count)
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6052 best = corners[i], best_count = n;
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6053 }
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6054
d590ec395dcd (four_corners_best): Reindent.
Gerd Moellmann <gerd@gnu.org>
parents: 40599
diff changeset
6055 return best;
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6056 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6057
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6058 /* Return the `background' field of IMG. If IMG doesn't have one yet,
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6059 it is guessed heuristically. If non-zero, XIMG is an existing XImage
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6060 object to use for the heuristic. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6061
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6062 unsigned long
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6063 image_background (img, f, ximg)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6064 struct image *img;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6065 struct frame *f;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6066 XImage *ximg;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6067 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6068 if (! img->background_valid)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6069 /* IMG doesn't have a background yet, try to guess a reasonable value. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6070 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6071 int free_ximg = !ximg;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6072
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6073 if (! ximg)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6074 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap,
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6075 0, 0, img->width, img->height, ~0, ZPixmap);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6076
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6077 img->background = four_corners_best (ximg, img->width, img->height);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6078
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6079 if (free_ximg)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6080 XDestroyImage (ximg);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6081
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6082 img->background_valid = 1;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6083 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6084
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6085 return img->background;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6086 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6087
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6088 /* Return the `background_transparent' field of IMG. If IMG doesn't
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6089 have one yet, it is guessed heuristically. If non-zero, MASK is an
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6090 existing XImage object to use for the heuristic. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6091
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6092 int
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6093 image_background_transparent (img, f, mask)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6094 struct image *img;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6095 struct frame *f;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6096 XImage *mask;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6097 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6098 if (! img->background_transparent_valid)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6099 /* IMG doesn't have a background yet, try to guess a reasonable value. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6100 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6101 if (img->mask)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6102 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6103 int free_mask = !mask;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6104
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6105 if (! mask)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6106 mask = XGetImage (FRAME_X_DISPLAY (f), img->mask,
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6107 0, 0, img->width, img->height, ~0, ZPixmap);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6108
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6109 img->background_transparent
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6110 = !four_corners_best (mask, img->width, img->height);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6111
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6112 if (free_mask)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6113 XDestroyImage (mask);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6114 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6115 else
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6116 img->background_transparent = 0;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6117
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6118 img->background_transparent_valid = 1;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6119 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6120
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6121 return img->background_transparent;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6122 }
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6123
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6124
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6125 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6126 Helper functions for X image types
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6127 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6128
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6129 static void x_clear_image_1 P_ ((struct frame *, struct image *, int,
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6130 int, int));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6131 static void x_clear_image P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6132 static unsigned long x_alloc_image_color P_ ((struct frame *f,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6133 struct image *img,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6134 Lisp_Object color_name,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6135 unsigned long dflt));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6136
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6137
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6138 /* Clear X resources of image IMG on frame F. PIXMAP_P non-zero means
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6139 free the pixmap if any. MASK_P non-zero means clear the mask
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6140 pixmap if any. COLORS_P non-zero means free colors allocated for
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6141 the image, if any. */
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6142
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6143 static void
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6144 x_clear_image_1 (f, img, pixmap_p, mask_p, colors_p)
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6145 struct frame *f;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6146 struct image *img;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6147 int pixmap_p, mask_p, colors_p;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6148 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6149 if (pixmap_p && img->pixmap)
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6150 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6151 XFreePixmap (FRAME_X_DISPLAY (f), img->pixmap);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6152 img->pixmap = None;
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6153 img->background_valid = 0;
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6154 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6155
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6156 if (mask_p && img->mask)
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6157 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6158 XFreePixmap (FRAME_X_DISPLAY (f), img->mask);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6159 img->mask = None;
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6160 img->background_transparent_valid = 0;
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6161 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6162
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6163 if (colors_p && img->ncolors)
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6164 {
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6165 x_free_colors (f, img->colors, img->ncolors);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6166 xfree (img->colors);
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6167 img->colors = NULL;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6168 img->ncolors = 0;
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6169 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6170 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6171
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6172 /* Free X resources of image IMG which is used on frame F. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6173
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6174 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6175 x_clear_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6176 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6177 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6178 {
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6179 BLOCK_INPUT;
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6180 x_clear_image_1 (f, img, 1, 1, 1);
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6181 UNBLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6182 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6183
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6184
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6185 /* Allocate color COLOR_NAME for image IMG on frame F. If color
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6186 cannot be allocated, use DFLT. Add a newly allocated color to
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6187 IMG->colors, so that it can be freed again. Value is the pixel
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6188 color. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6189
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6190 static unsigned long
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6191 x_alloc_image_color (f, img, color_name, dflt)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6192 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6193 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6194 Lisp_Object color_name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6195 unsigned long dflt;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6196 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6197 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6198 unsigned long result;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6199
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6200 xassert (STRINGP (color_name));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6201
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
6202 if (x_defined_color (f, SDATA (color_name), &color, 1))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6203 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6204 /* This isn't called frequently so we get away with simply
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6205 reallocating the color vector to the needed size, here. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6206 ++img->ncolors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6207 img->colors =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6208 (unsigned long *) xrealloc (img->colors,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6209 img->ncolors * sizeof *img->colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6210 img->colors[img->ncolors - 1] = color.pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6211 result = color.pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6212 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6213 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6214 result = dflt;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6215
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6216 return result;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6217 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6218
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6219
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6220
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6221 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6222 Image Cache
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6223 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6224
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6225 static void cache_image P_ ((struct frame *f, struct image *img));
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6226 static void postprocess_image P_ ((struct frame *, struct image *));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6227
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6228
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6229 /* Return a new, initialized image cache that is allocated from the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6230 heap. Call free_image_cache to free an image cache. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6231
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6232 struct image_cache *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6233 make_image_cache ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6234 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6235 struct image_cache *c = (struct image_cache *) xmalloc (sizeof *c);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6236 int size;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6237
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6238 bzero (c, sizeof *c);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6239 c->size = 50;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6240 c->images = (struct image **) xmalloc (c->size * sizeof *c->images);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6241 size = IMAGE_CACHE_BUCKETS_SIZE * sizeof *c->buckets;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6242 c->buckets = (struct image **) xmalloc (size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6243 bzero (c->buckets, size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6244 return c;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6245 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6246
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6247
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6248 /* Free image cache of frame F. Be aware that X frames share images
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6249 caches. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6250
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6251 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6252 free_image_cache (f)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6253 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6254 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6255 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6256 if (c)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6257 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6258 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6259
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6260 /* Cache should not be referenced by any frame when freed. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6261 xassert (c->refcount == 0);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6262
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6263 for (i = 0; i < c->used; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6264 free_image (f, c->images[i]);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6265 xfree (c->images);
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
6266 xfree (c->buckets);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6267 xfree (c);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6268 FRAME_X_IMAGE_CACHE (f) = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6269 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6270 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6271
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6272
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6273 /* Clear image cache of frame F. FORCE_P non-zero means free all
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6274 images. FORCE_P zero means clear only images that haven't been
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6275 displayed for some time. Should be called from time to time to
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6276 reduce the number of loaded images. If image-eviction-seconds is
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6277 non-nil, this frees images in the cache which weren't displayed for
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6278 at least that many seconds. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6279
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6280 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6281 clear_image_cache (f, force_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6282 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6283 int force_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6284 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6285 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6286
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
6287 if (c && INTEGERP (Vimage_cache_eviction_delay))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6288 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6289 EMACS_TIME t;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6290 unsigned long old;
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6291 int i, nfreed;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6292
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6293 EMACS_GET_TIME (t);
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
6294 old = EMACS_SECS (t) - XFASTINT (Vimage_cache_eviction_delay);
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6295
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6296 /* Block input so that we won't be interrupted by a SIGIO
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6297 while being in an inconsistent state. */
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6298 BLOCK_INPUT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6299
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6300 for (i = nfreed = 0; i < c->used; ++i)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6301 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6302 struct image *img = c->images[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6303 if (img != NULL
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6304 && (force_p || img->timestamp < old))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6305 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6306 free_image (f, img);
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6307 ++nfreed;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6308 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6309 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6310
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6311 /* We may be clearing the image cache because, for example,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6312 Emacs was iconified for a longer period of time. In that
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6313 case, current matrices may still contain references to
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6314 images freed above. So, clear these matrices. */
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6315 if (nfreed)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6316 {
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6317 Lisp_Object tail, frame;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6318
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6319 FOR_EACH_FRAME (tail, frame)
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6320 {
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6321 struct frame *f = XFRAME (frame);
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6322 if (FRAME_X_P (f)
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6323 && FRAME_X_IMAGE_CACHE (f) == c)
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
6324 clear_current_matrices (f);
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6325 }
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6326
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6327 ++windows_or_buffers_changed;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6328 }
31688
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6329
437830e83b45 (clear_image_cache): Clear current matrices of all
Gerd Moellmann <gerd@gnu.org>
parents: 31686
diff changeset
6330 UNBLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6331 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6332 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6333
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6334
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6335 DEFUN ("clear-image-cache", Fclear_image_cache, Sclear_image_cache,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6336 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
6337 doc: /* Clear the image cache of FRAME.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
6338 FRAME nil or omitted means use the selected frame.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
6339 FRAME t means clear the image caches of all frames. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
6340 (frame)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6341 Lisp_Object frame;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6342 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6343 if (EQ (frame, Qt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6344 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6345 Lisp_Object tail;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6346
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6347 FOR_EACH_FRAME (tail, frame)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6348 if (FRAME_X_P (XFRAME (frame)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6349 clear_image_cache (XFRAME (frame), 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6350 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6351 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6352 clear_image_cache (check_x_frame (frame), 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6353
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6354 return Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6355 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6356
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6357
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6358 /* Compute masks and transform image IMG on frame F, as specified
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6359 by the image's specification, */
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6360
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6361 static void
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6362 postprocess_image (f, img)
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6363 struct frame *f;
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6364 struct image *img;
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6365 {
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6366 /* Manipulation of the image's mask. */
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6367 if (img->pixmap)
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6368 {
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6369 Lisp_Object conversion, spec;
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6370 Lisp_Object mask;
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6371
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6372 spec = img->spec;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6373
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6374 /* `:heuristic-mask t'
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6375 `:mask heuristic'
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6376 means build a mask heuristically.
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6377 `:heuristic-mask (R G B)'
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6378 `:mask (heuristic (R G B))'
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6379 means build a mask from color (R G B) in the
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6380 image.
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6381 `:mask nil'
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6382 means remove a mask, if any. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6383
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6384 mask = image_spec_value (spec, QCheuristic_mask, NULL);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6385 if (!NILP (mask))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6386 x_build_heuristic_mask (f, img, mask);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6387 else
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6388 {
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6389 int found_p;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6390
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6391 mask = image_spec_value (spec, QCmask, &found_p);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6392
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6393 if (EQ (mask, Qheuristic))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6394 x_build_heuristic_mask (f, img, Qt);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6395 else if (CONSP (mask)
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6396 && EQ (XCAR (mask), Qheuristic))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6397 {
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6398 if (CONSP (XCDR (mask)))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6399 x_build_heuristic_mask (f, img, XCAR (XCDR (mask)));
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6400 else
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6401 x_build_heuristic_mask (f, img, XCDR (mask));
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6402 }
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6403 else if (NILP (mask) && found_p && img->mask)
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6404 {
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6405 XFreePixmap (FRAME_X_DISPLAY (f), img->mask);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6406 img->mask = None;
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6407 }
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6408 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6409
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6410
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6411 /* Should we apply an image transformation algorithm? */
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6412 conversion = image_spec_value (spec, QCconversion, NULL);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6413 if (EQ (conversion, Qdisabled))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6414 x_disable_image (f, img);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6415 else if (EQ (conversion, Qlaplace))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6416 x_laplace (f, img);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6417 else if (EQ (conversion, Qemboss))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6418 x_emboss (f, img);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6419 else if (CONSP (conversion)
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6420 && EQ (XCAR (conversion), Qedge_detection))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6421 {
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6422 Lisp_Object tem;
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6423 tem = XCDR (conversion);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6424 if (CONSP (tem))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6425 x_edge_detection (f, img,
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6426 Fplist_get (tem, QCmatrix),
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6427 Fplist_get (tem, QCcolor_adjustment));
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6428 }
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6429 }
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6430 }
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6431
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6432
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6433 /* Return the id of image with Lisp specification SPEC on frame F.
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
6434 SPEC must be a valid Lisp image specification (see valid_image_p). */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6435
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6436 int
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
6437 lookup_image (f, spec)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6438 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6439 Lisp_Object spec;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6440 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6441 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6442 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6443 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6444 unsigned hash;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6445 struct gcpro gcpro1;
25817
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
6446 EMACS_TIME now;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6447
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6448 /* F must be a window-system frame, and SPEC must be a valid image
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6449 specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6450 xassert (FRAME_WINDOW_P (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6451 xassert (valid_image_p (spec));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6452
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6453 GCPRO1 (spec);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6454
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6455 /* Look up SPEC in the hash table of the image cache. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6456 hash = sxhash (spec, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6457 i = hash % IMAGE_CACHE_BUCKETS_SIZE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6458
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6459 for (img = c->buckets[i]; img; img = img->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6460 if (img->hash == hash && !NILP (Fequal (img->spec, spec)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6461 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6462
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6463 /* If not found, create a new image and cache it. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6464 if (img == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6465 {
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6466 extern Lisp_Object Qpostscript;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6467
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
6468 BLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6469 img = make_image (spec, hash);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6470 cache_image (f, img);
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
6471 img->load_failed_p = img->type->load (f, img) == 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6472
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6473 /* If we can't load the image, and we don't have a width and
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6474 height, use some arbitrary width and height so that we can
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6475 draw a rectangle for it. */
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
6476 if (img->load_failed_p)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6477 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6478 Lisp_Object value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6479
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6480 value = image_spec_value (spec, QCwidth, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6481 img->width = (INTEGERP (value)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6482 ? XFASTINT (value) : DEFAULT_IMAGE_WIDTH);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6483 value = image_spec_value (spec, QCheight, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6484 img->height = (INTEGERP (value)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6485 ? XFASTINT (value) : DEFAULT_IMAGE_HEIGHT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6486 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6487 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6488 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6489 /* Handle image type independent image attributes
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6490 `:ascent ASCENT', `:margin MARGIN', `:relief RELIEF',
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6491 `:background COLOR'. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6492 Lisp_Object ascent, margin, relief, bg;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6493
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6494 ascent = image_spec_value (spec, QCascent, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6495 if (INTEGERP (ascent))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6496 img->ascent = XFASTINT (ascent);
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6497 else if (EQ (ascent, Qcenter))
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6498 img->ascent = CENTERED_IMAGE_ASCENT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6499
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6500 margin = image_spec_value (spec, QCmargin, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6501 if (INTEGERP (margin) && XINT (margin) >= 0)
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6502 img->vmargin = img->hmargin = XFASTINT (margin);
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6503 else if (CONSP (margin) && INTEGERP (XCAR (margin))
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6504 && INTEGERP (XCDR (margin)))
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6505 {
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6506 if (XINT (XCAR (margin)) > 0)
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6507 img->hmargin = XFASTINT (XCAR (margin));
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6508 if (XINT (XCDR (margin)) > 0)
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6509 img->vmargin = XFASTINT (XCDR (margin));
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6510 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6511
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6512 relief = image_spec_value (spec, QCrelief, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6513 if (INTEGERP (relief))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6514 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6515 img->relief = XINT (relief);
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6516 img->hmargin += abs (img->relief);
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6517 img->vmargin += abs (img->relief);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6518 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6519
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6520 if (! img->background_valid)
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6521 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6522 bg = image_spec_value (img->spec, QCbackground, NULL);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6523 if (!NILP (bg))
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6524 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6525 img->background
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6526 = x_alloc_image_color (f, img, bg,
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6527 FRAME_BACKGROUND_PIXEL (f));
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6528 img->background_valid = 1;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6529 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6530 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
6531
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6532 /* Do image transformations and compute masks, unless we
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6533 don't have the image yet. */
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6534 if (!EQ (*img->type->type, Qpostscript))
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
6535 postprocess_image (f, img);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6536 }
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6537
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
6538 UNBLOCK_INPUT;
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
6539 xassert (!interrupt_input_blocked);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6540 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6541
25817
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
6542 /* We're using IMG, so set its timestamp to `now'. */
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
6543 EMACS_GET_TIME (now);
190a99688b53 (lookup_image): Set image's timestamp because it's
Gerd Moellmann <gerd@gnu.org>
parents: 25800
diff changeset
6544 img->timestamp = EMACS_SECS (now);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6545
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6546 UNGCPRO;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6547
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6548 /* Value is the image id. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6549 return img->id;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6550 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6551
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6552
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6553 /* Cache image IMG in the image cache of frame F. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6554
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6555 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6556 cache_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6557 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6558 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6559 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6560 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6561 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6562
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6563 /* Find a free slot in c->images. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6564 for (i = 0; i < c->used; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6565 if (c->images[i] == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6566 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6567
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6568 /* If no free slot found, maybe enlarge c->images. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6569 if (i == c->used && c->used == c->size)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6570 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6571 c->size *= 2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6572 c->images = (struct image **) xrealloc (c->images,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6573 c->size * sizeof *c->images);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6574 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6575
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6576 /* Add IMG to c->images, and assign IMG an id. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6577 c->images[i] = img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6578 img->id = i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6579 if (i == c->used)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6580 ++c->used;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6581
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6582 /* Add IMG to the cache's hash table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6583 i = img->hash % IMAGE_CACHE_BUCKETS_SIZE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6584 img->next = c->buckets[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6585 if (img->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6586 img->next->prev = img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6587 img->prev = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6588 c->buckets[i] = img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6589 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6590
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6591
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6592 /* Call FN on every image in the image cache of frame F. Used to mark
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6593 Lisp Objects in the image cache. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6594
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6595 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6596 forall_images_in_image_cache (f, fn)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6597 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6598 void (*fn) P_ ((struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6599 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6600 if (FRAME_LIVE_P (f) && FRAME_X_P (f))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6601 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6602 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6603 if (c)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6604 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6605 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6606 for (i = 0; i < c->used; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6607 if (c->images[i])
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6608 fn (c->images[i]);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6609 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6610 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6611 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6612
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6613
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6614
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6615 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6616 X support code
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6617 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6618
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6619 static int x_create_x_image_and_pixmap P_ ((struct frame *, int, int, int,
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6620 XImage **, Pixmap *));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6621 static void x_destroy_x_image P_ ((XImage *));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6622 static void x_put_x_image P_ ((struct frame *, XImage *, Pixmap, int, int));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6623
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6624
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6625 /* Create an XImage and a pixmap of size WIDTH x HEIGHT for use on
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6626 frame F. Set *XIMG and *PIXMAP to the XImage and Pixmap created.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6627 Set (*XIMG)->data to a raster of WIDTH x HEIGHT pixels allocated
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6628 via xmalloc. Print error messages via image_error if an error
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6629 occurs. Value is non-zero if successful. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6630
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6631 static int
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6632 x_create_x_image_and_pixmap (f, width, height, depth, ximg, pixmap)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6633 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6634 int width, height, depth;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6635 XImage **ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6636 Pixmap *pixmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6637 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6638 Display *display = FRAME_X_DISPLAY (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6639 Screen *screen = FRAME_X_SCREEN (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6640 Window window = FRAME_X_WINDOW (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6641
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6642 xassert (interrupt_input_blocked);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6643
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6644 if (depth <= 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6645 depth = DefaultDepthOfScreen (screen);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6646 *ximg = XCreateImage (display, DefaultVisualOfScreen (screen),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6647 depth, ZPixmap, 0, NULL, width, height,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6648 depth > 16 ? 32 : depth > 8 ? 16 : 8, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6649 if (*ximg == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6650 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6651 image_error ("Unable to allocate X image", Qnil, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6652 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6653 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6654
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6655 /* Allocate image raster. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6656 (*ximg)->data = (char *) xmalloc ((*ximg)->bytes_per_line * height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6657
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6658 /* Allocate a pixmap of the same size. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6659 *pixmap = XCreatePixmap (display, window, width, height, depth);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
6660 if (*pixmap == None)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6661 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6662 x_destroy_x_image (*ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6663 *ximg = NULL;
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
6664 image_error ("Unable to create X pixmap", Qnil, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6665 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6666 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6667
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6668 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6669 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6670
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6671
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6672 /* Destroy XImage XIMG. Free XIMG->data. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6673
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6674 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6675 x_destroy_x_image (ximg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6676 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6677 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6678 xassert (interrupt_input_blocked);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6679 if (ximg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6680 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6681 xfree (ximg->data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6682 ximg->data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6683 XDestroyImage (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6684 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6685 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6686
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6687
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6688 /* Put XImage XIMG into pixmap PIXMAP on frame F. WIDTH and HEIGHT
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6689 are width and height of both the image and pixmap. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6690
25691
815efc48a80b (x_put_x_image): Make type consistent with declaration.
Dave Love <fx@gnu.org>
parents: 25679
diff changeset
6691 static void
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6692 x_put_x_image (f, ximg, pixmap, width, height)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6693 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6694 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6695 Pixmap pixmap;
48328
7ce5ded16e10 (x_put_x_image):
Dave Love <fx@gnu.org>
parents: 48000
diff changeset
6696 int width, height;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6697 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6698 GC gc;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6699
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6700 xassert (interrupt_input_blocked);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6701 gc = XCreateGC (FRAME_X_DISPLAY (f), pixmap, 0, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6702 XPutImage (FRAME_X_DISPLAY (f), pixmap, gc, ximg, 0, 0, 0, 0, width, height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6703 XFreeGC (FRAME_X_DISPLAY (f), gc);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6704 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6705
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6706
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6707
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6708 /***********************************************************************
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6709 File Handling
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6710 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6711
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6712 static Lisp_Object x_find_image_file P_ ((Lisp_Object));
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6713 static char *slurp_file P_ ((char *, int *));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6714
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6715
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6716 /* Find image file FILE. Look in data-directory, then
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6717 x-bitmap-file-path. Value is the full name of the file found, or
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6718 nil if not found. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6719
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6720 static Lisp_Object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6721 x_find_image_file (file)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6722 Lisp_Object file;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6723 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6724 Lisp_Object file_found, search_path;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6725 struct gcpro gcpro1, gcpro2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6726 int fd;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6727
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6728 file_found = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6729 search_path = Fcons (Vdata_directory, Vx_bitmap_file_path);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6730 GCPRO2 (file_found, search_path);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6731
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6732 /* Try to find FILE in data-directory, then x-bitmap-file-path. */
45009
7a00556be3ce (x_create_bitmap_from_file, x_find_image_file): Update call to openp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44786
diff changeset
6733 fd = openp (search_path, file, Qnil, &file_found, Qnil);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6734
33443
2c60aa5cd386 (x_create_bitmap_from_file, x_find_image_file): Use new openp return protocol.
Miles Bader <miles@gnu.org>
parents: 33242
diff changeset
6735 if (fd == -1)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6736 file_found = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6737 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6738 close (fd);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6739
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6740 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6741 return file_found;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6742 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6743
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6744
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6745 /* Read FILE into memory. Value is a pointer to a buffer allocated
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6746 with xmalloc holding FILE's contents. Value is null if an error
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
6747 occurred. *SIZE is set to the size of the file. */
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6748
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6749 static char *
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6750 slurp_file (file, size)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6751 char *file;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6752 int *size;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6753 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6754 FILE *fp = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6755 char *buf = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6756 struct stat st;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6757
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6758 if (stat (file, &st) == 0
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6759 && (fp = fopen (file, "r")) != NULL
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6760 && (buf = (char *) xmalloc (st.st_size),
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6761 fread (buf, 1, st.st_size, fp) == st.st_size))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6762 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6763 *size = st.st_size;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6764 fclose (fp);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6765 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6766 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6767 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6768 if (fp)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6769 fclose (fp);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6770 if (buf)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6771 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6772 xfree (buf);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6773 buf = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6774 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6775 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6776
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6777 return buf;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6778 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6779
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6780
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6781
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6782 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6783 XBM images
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6784 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6785
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6786 static int xbm_scan P_ ((char **, char *, char *, int *));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6787 static int xbm_load P_ ((struct frame *f, struct image *img));
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6788 static int xbm_load_image P_ ((struct frame *f, struct image *img,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6789 char *, char *));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6790 static int xbm_image_p P_ ((Lisp_Object object));
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6791 static int xbm_read_bitmap_data P_ ((char *, char *, int *, int *,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6792 unsigned char **));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6793 static int xbm_file_p P_ ((Lisp_Object));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6794
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6795
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6796 /* Indices of image specification fields in xbm_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6797
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6798 enum xbm_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6799 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6800 XBM_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6801 XBM_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6802 XBM_WIDTH,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6803 XBM_HEIGHT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6804 XBM_DATA,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6805 XBM_FOREGROUND,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6806 XBM_BACKGROUND,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6807 XBM_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6808 XBM_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6809 XBM_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6810 XBM_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6811 XBM_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6812 XBM_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6813 XBM_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6814 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6815
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6816 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6817 of valid XBM image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6818
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6819 static struct image_keyword xbm_format[XBM_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6820 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6821 {":type", IMAGE_SYMBOL_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6822 {":file", IMAGE_STRING_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6823 {":width", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6824 {":height", IMAGE_POSITIVE_INTEGER_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6825 {":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
6826 {":foreground", IMAGE_STRING_OR_NIL_VALUE, 0},
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
6827 {":background", IMAGE_STRING_OR_NIL_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
6828 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
6829 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6830 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
6831 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6832 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
6833 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6834 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6835
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6836 /* Structure describing the image type XBM. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6837
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6838 static struct image_type xbm_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6839 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6840 &Qxbm,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6841 xbm_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6842 xbm_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6843 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6844 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6845 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6846
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6847 /* Tokens returned from xbm_scan. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6848
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6849 enum xbm_token
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6850 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6851 XBM_TK_IDENT = 256,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6852 XBM_TK_NUMBER
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6853 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6854
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6855
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6856 /* Return non-zero if OBJECT is a valid XBM-type image specification.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6857 A valid specification is a list starting with the symbol `image'
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6858 The rest of the list is a property list which must contain an
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6859 entry `:type xbm..
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6860
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6861 If the specification specifies a file to load, it must contain
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6862 an entry `:file FILENAME' where FILENAME is a string.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6863
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6864 If the specification is for a bitmap loaded from memory it must
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6865 contain `:width WIDTH', `:height HEIGHT', and `:data DATA', where
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6866 WIDTH and HEIGHT are integers > 0. DATA may be:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6867
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6868 1. a string large enough to hold the bitmap data, i.e. it must
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6869 have a size >= (WIDTH + 7) / 8 * HEIGHT
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6870
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6871 2. a bool-vector of size >= WIDTH * HEIGHT
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6872
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6873 3. a vector of strings or bool-vectors, one for each line of the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6874 bitmap.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6875
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6876 4. A string containing an in-memory XBM file. WIDTH and HEIGHT
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6877 may not be specified in this case because they are defined in the
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6878 XBM file.
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6879
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6880 Both the file and data forms may contain the additional entries
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6881 `:background COLOR' and `:foreground COLOR'. If not present,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6882 foreground and background of the frame on which the image is
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
6883 displayed is used. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6884
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6885 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6886 xbm_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6887 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6888 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6889 struct image_keyword kw[XBM_LAST];
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6890
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6891 bcopy (xbm_format, kw, sizeof kw);
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
6892 if (!parse_image_spec (object, kw, XBM_LAST, Qxbm))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6893 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6894
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6895 xassert (EQ (kw[XBM_TYPE].value, Qxbm));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6896
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6897 if (kw[XBM_FILE].count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6898 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6899 if (kw[XBM_WIDTH].count || kw[XBM_HEIGHT].count || kw[XBM_DATA].count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6900 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6901 }
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6902 else if (kw[XBM_DATA].count && xbm_file_p (kw[XBM_DATA].value))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6903 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6904 /* In-memory XBM file. */
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6905 if (kw[XBM_WIDTH].count || kw[XBM_HEIGHT].count || kw[XBM_FILE].count)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6906 return 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6907 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6908 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6909 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6910 Lisp_Object data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6911 int width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6912
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6913 /* Entries for `:width', `:height' and `:data' must be present. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6914 if (!kw[XBM_WIDTH].count
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6915 || !kw[XBM_HEIGHT].count
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6916 || !kw[XBM_DATA].count)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6917 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6918
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6919 data = kw[XBM_DATA].value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6920 width = XFASTINT (kw[XBM_WIDTH].value);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6921 height = XFASTINT (kw[XBM_HEIGHT].value);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6922
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6923 /* Check type of data, and width and height against contents of
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6924 data. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6925 if (VECTORP (data))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6926 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6927 int i;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6928
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6929 /* Number of elements of the vector must be >= height. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6930 if (XVECTOR (data)->size < height)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6931 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6932
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6933 /* Each string or bool-vector in data must be large enough
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6934 for one line of the image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6935 for (i = 0; i < height; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6936 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6937 Lisp_Object elt = XVECTOR (data)->contents[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6938
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6939 if (STRINGP (elt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6940 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
6941 if (SCHARS (elt)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6942 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6943 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6944 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6945 else if (BOOL_VECTOR_P (elt))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6946 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6947 if (XBOOL_VECTOR (elt)->size < width)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6948 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6949 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6950 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6951 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6952 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6953 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6954 else if (STRINGP (data))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6955 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
6956 if (SCHARS (data)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6957 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR * height)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6958 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6959 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6960 else if (BOOL_VECTOR_P (data))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6961 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6962 if (XBOOL_VECTOR (data)->size < width * height)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6963 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6964 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6965 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6966 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6967 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6968
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6969 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6970 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6971
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6972
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6973 /* Scan a bitmap file. FP is the stream to read from. Value is
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6974 either an enumerator from enum xbm_token, or a character for a
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6975 single-character token, or 0 at end of file. If scanning an
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6976 identifier, store the lexeme of the identifier in SVAL. If
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6977 scanning a number, store its value in *IVAL. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6978
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6979 static int
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6980 xbm_scan (s, end, sval, ival)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6981 char **s, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6982 char *sval;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6983 int *ival;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6984 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6985 int c;
31768
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6986
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
6987 loop:
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6988
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6989 /* Skip white space. */
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6990 while (*s < end && (c = *(*s)++, isspace (c)))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6991 ;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6992
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6993 if (*s >= end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6994 c = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6995 else if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6996 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
6997 int value = 0, digit;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6998
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
6999 if (c == '0' && *s < end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7000 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7001 c = *(*s)++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7002 if (c == 'x' || c == 'X')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7003 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7004 while (*s < end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7005 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7006 c = *(*s)++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7007 if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7008 digit = c - '0';
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7009 else if (c >= 'a' && c <= 'f')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7010 digit = c - 'a' + 10;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7011 else if (c >= 'A' && c <= 'F')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7012 digit = c - 'A' + 10;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7013 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7014 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7015 value = 16 * value + digit;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7016 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7017 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7018 else if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7019 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7020 value = c - '0';
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7021 while (*s < end
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7022 && (c = *(*s)++, isdigit (c)))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7023 value = 8 * value + c - '0';
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7024 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7025 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7026 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7027 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7028 value = c - '0';
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7029 while (*s < end
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7030 && (c = *(*s)++, isdigit (c)))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7031 value = 10 * value + c - '0';
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7032 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7033
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7034 if (*s < end)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7035 *s = *s - 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7036 *ival = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7037 c = XBM_TK_NUMBER;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7038 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7039 else if (isalpha (c) || c == '_')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7040 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7041 *sval++ = c;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7042 while (*s < end
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7043 && (c = *(*s)++, (isalnum (c) || c == '_')))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7044 *sval++ = c;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7045 *sval = 0;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7046 if (*s < end)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7047 *s = *s - 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7048 c = XBM_TK_IDENT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7049 }
31768
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7050 else if (c == '/' && **s == '*')
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7051 {
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7052 /* C-style comment. */
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7053 ++*s;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7054 while (**s && (**s != '*' || *(*s + 1) != '/'))
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7055 ++*s;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7056 if (**s)
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7057 {
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7058 *s += 2;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7059 goto loop;
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7060 }
5f91cf9127a6 (xbm_scan): Allow C-style comments.
Gerd Moellmann <gerd@gnu.org>
parents: 31761
diff changeset
7061 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7062
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7063 return c;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7064 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7065
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7066
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7067 /* Replacement for XReadBitmapFileData which isn't available under old
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7068 X versions. CONTENTS is a pointer to a buffer to parse; END is the
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7069 buffer's end. Set *WIDTH and *HEIGHT to the width and height of
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7070 the image. Return in *DATA the bitmap data allocated with xmalloc.
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7071 Value is non-zero if successful. DATA null means just test if
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7072 CONTENTS looks like an in-memory XBM file. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7073
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7074 static int
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7075 xbm_read_bitmap_data (contents, end, width, height, data)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7076 char *contents, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7077 int *width, *height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7078 unsigned char **data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7079 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7080 char *s = contents;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7081 char buffer[BUFSIZ];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7082 int padding_p = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7083 int v10 = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7084 int bytes_per_line, i, nbytes;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7085 unsigned char *p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7086 int value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7087 int LA1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7088
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7089 #define match() \
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7090 LA1 = xbm_scan (&s, end, buffer, &value)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7091
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7092 #define expect(TOKEN) \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7093 if (LA1 != (TOKEN)) \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7094 goto failure; \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7095 else \
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7096 match ()
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7097
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7098 #define expect_ident(IDENT) \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7099 if (LA1 == XBM_TK_IDENT && strcmp (buffer, (IDENT)) == 0) \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7100 match (); \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7101 else \
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7102 goto failure
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7103
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7104 *width = *height = -1;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7105 if (data)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7106 *data = NULL;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7107 LA1 = xbm_scan (&s, end, buffer, &value);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7108
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7109 /* Parse defines for width, height and hot-spots. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7110 while (LA1 == '#')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7111 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7112 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7113 expect_ident ("define");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7114 expect (XBM_TK_IDENT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7115
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7116 if (LA1 == XBM_TK_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7117 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7118 char *p = strrchr (buffer, '_');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7119 p = p ? p + 1 : buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7120 if (strcmp (p, "width") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7121 *width = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7122 else if (strcmp (p, "height") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7123 *height = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7124 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7125 expect (XBM_TK_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7126 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7127
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7128 if (*width < 0 || *height < 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7129 goto failure;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7130 else if (data == NULL)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7131 goto success;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7132
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7133 /* Parse bits. Must start with `static'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7134 expect_ident ("static");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7135 if (LA1 == XBM_TK_IDENT)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7136 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7137 if (strcmp (buffer, "unsigned") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7138 {
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7139 match ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7140 expect_ident ("char");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7141 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7142 else if (strcmp (buffer, "short") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7143 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7144 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7145 v10 = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7146 if (*width % 16 && *width % 16 < 9)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7147 padding_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7148 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7149 else if (strcmp (buffer, "char") == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7150 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7151 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7152 goto failure;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7153 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7154 else
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7155 goto failure;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7156
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7157 expect (XBM_TK_IDENT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7158 expect ('[');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7159 expect (']');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7160 expect ('=');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7161 expect ('{');
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7162
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7163 bytes_per_line = (*width + 7) / 8 + padding_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7164 nbytes = bytes_per_line * *height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7165 p = *data = (char *) xmalloc (nbytes);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7166
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7167 if (v10)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7168 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7169 for (i = 0; i < nbytes; i += 2)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7170 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7171 int val = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7172 expect (XBM_TK_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7173
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7174 *p++ = val;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7175 if (!padding_p || ((i + 2) % bytes_per_line))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7176 *p++ = value >> 8;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7177
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7178 if (LA1 == ',' || LA1 == '}')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7179 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7180 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7181 goto failure;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7182 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7183 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7184 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7185 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7186 for (i = 0; i < nbytes; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7187 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7188 int val = value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7189 expect (XBM_TK_NUMBER);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7190
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7191 *p++ = val;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7192
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7193 if (LA1 == ',' || LA1 == '}')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7194 match ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7195 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7196 goto failure;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7197 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7198 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7199
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7200 success:
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7201 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7202
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7203 failure:
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7204
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7205 if (data && *data)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7206 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7207 xfree (*data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7208 *data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7209 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7210 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7211
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7212 #undef match
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7213 #undef expect
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7214 #undef expect_ident
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7215 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7216
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7217
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7218 /* Load XBM image IMG which will be displayed on frame F from buffer
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7219 CONTENTS. END is the end of the buffer. Value is non-zero if
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7220 successful. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7221
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7222 static int
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7223 xbm_load_image (f, img, contents, end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7224 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7225 struct image *img;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7226 char *contents, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7227 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7228 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7229 unsigned char *data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7230 int success_p = 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7231
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7232 rc = xbm_read_bitmap_data (contents, end, &img->width, &img->height, &data);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7233 if (rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7234 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7235 int depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7236 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7237 unsigned long background = FRAME_BACKGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7238 Lisp_Object value;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7239
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7240 xassert (img->width > 0 && img->height > 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7241
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7242 /* Get foreground and background colors, maybe allocate colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7243 value = image_spec_value (img->spec, QCforeground, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7244 if (!NILP (value))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7245 foreground = x_alloc_image_color (f, img, value, foreground);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7246 value = image_spec_value (img->spec, QCbackground, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7247 if (!NILP (value))
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7248 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7249 background = x_alloc_image_color (f, img, value, background);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7250 img->background = background;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7251 img->background_valid = 1;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7252 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7253
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7254 img->pixmap
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7255 = XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7256 FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7257 data,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7258 img->width, img->height,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7259 foreground, background,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7260 depth);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7261 xfree (data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7262
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
7263 if (img->pixmap == None)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7264 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7265 x_clear_image (f, img);
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7266 image_error ("Unable to create X pixmap for `%s'", img->spec, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7267 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7268 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7269 success_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7270 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7271 else
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
7272 image_error ("Error loading XBM image `%s'", img->spec, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7273
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7274 return success_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7275 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7276
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7277
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7278 /* Value is non-zero if DATA looks like an in-memory XBM file. */
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7279
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7280 static int
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7281 xbm_file_p (data)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7282 Lisp_Object data;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7283 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7284 int w, h;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7285 return (STRINGP (data)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7286 && xbm_read_bitmap_data (SDATA (data),
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7287 (SDATA (data)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7288 + SBYTES (data)),
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7289 &w, &h, NULL));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7290 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7291
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7292
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7293 /* Fill image IMG which is used on frame F with pixmap data. Value is
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7294 non-zero if successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7295
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7296 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7297 xbm_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7298 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7299 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7300 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7301 int success_p = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7302 Lisp_Object file_name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7303
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7304 xassert (xbm_image_p (img->spec));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7305
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7306 /* If IMG->spec specifies a file name, create a non-file spec from it. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7307 file_name = image_spec_value (img->spec, QCfile, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7308 if (STRINGP (file_name))
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7309 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7310 Lisp_Object file;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7311 char *contents;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7312 int size;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7313 struct gcpro gcpro1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7314
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7315 file = x_find_image_file (file_name);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7316 GCPRO1 (file);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7317 if (!STRINGP (file))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7318 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7319 image_error ("Cannot find image file `%s'", file_name, Qnil);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7320 UNGCPRO;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7321 return 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7322 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7323
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7324 contents = slurp_file (SDATA (file), &size);
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7325 if (contents == NULL)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7326 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7327 image_error ("Error loading XBM image `%s'", img->spec, Qnil);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7328 UNGCPRO;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7329 return 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7330 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7331
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7332 success_p = xbm_load_image (f, img, contents, contents + size);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7333 UNGCPRO;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7334 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7335 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7336 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7337 struct image_keyword fmt[XBM_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7338 Lisp_Object data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7339 int depth;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7340 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7341 unsigned long background = FRAME_BACKGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7342 char *bits;
34976
05c36b1fa618 (x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents: 34911
diff changeset
7343 int parsed_p;
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7344 int in_memory_file_p = 0;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7345
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7346 /* See if data looks like an in-memory XBM file. */
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7347 data = image_spec_value (img->spec, QCdata, NULL);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7348 in_memory_file_p = xbm_file_p (data);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7349
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7350 /* Parse the image specification. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7351 bcopy (xbm_format, fmt, sizeof fmt);
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
7352 parsed_p = parse_image_spec (img->spec, fmt, XBM_LAST, Qxbm);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7353 xassert (parsed_p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7354
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7355 /* Get specified width, and height. */
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7356 if (!in_memory_file_p)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7357 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7358 img->width = XFASTINT (fmt[XBM_WIDTH].value);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7359 img->height = XFASTINT (fmt[XBM_HEIGHT].value);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7360 xassert (img->width > 0 && img->height > 0);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7361 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7362
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7363 /* Get foreground and background colors, maybe allocate colors. */
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
7364 if (fmt[XBM_FOREGROUND].count
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
7365 && STRINGP (fmt[XBM_FOREGROUND].value))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7366 foreground = x_alloc_image_color (f, img, fmt[XBM_FOREGROUND].value,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7367 foreground);
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
7368 if (fmt[XBM_BACKGROUND].count
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
7369 && STRINGP (fmt[XBM_BACKGROUND].value))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7370 background = x_alloc_image_color (f, img, fmt[XBM_BACKGROUND].value,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7371 background);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7372
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7373 if (in_memory_file_p)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7374 success_p = xbm_load_image (f, img, SDATA (data),
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7375 (SDATA (data)
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7376 + SBYTES (data)));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7377 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7378 {
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7379 if (VECTORP (data))
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7380 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7381 int i;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7382 char *p;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7383 int nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7384
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7385 p = bits = (char *) alloca (nbytes * img->height);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7386 for (i = 0; i < img->height; ++i, p += nbytes)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7387 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7388 Lisp_Object line = XVECTOR (data)->contents[i];
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7389 if (STRINGP (line))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7390 bcopy (SDATA (line), p, nbytes);
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7391 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7392 bcopy (XBOOL_VECTOR (line)->data, p, nbytes);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7393 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7394 }
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7395 else if (STRINGP (data))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7396 bits = SDATA (data);
28747
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7397 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7398 bits = XBOOL_VECTOR (data)->data;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7399
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7400 /* Create the pixmap. */
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7401 depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f));
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7402 img->pixmap
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7403 = XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f),
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7404 FRAME_X_WINDOW (f),
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7405 bits,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7406 img->width, img->height,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7407 foreground, background,
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7408 depth);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7409 if (img->pixmap)
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7410 success_p = 1;
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7411 else
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7412 {
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7413 image_error ("Unable to create pixmap for XBM image `%s'",
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7414 img->spec, Qnil);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7415 x_clear_image (f, img);
6f90293e6ccb (slurp_file): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28690
diff changeset
7416 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7417 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7418 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7419
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7420 return success_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7421 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7422
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7423
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7424
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7425 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7426 XPM images
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7427 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7428
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7429 #if HAVE_XPM
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7430
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7431 static int xpm_image_p P_ ((Lisp_Object object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7432 static int xpm_load P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7433 static int xpm_valid_color_symbols_p P_ ((Lisp_Object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7434
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7435 #include "X11/xpm.h"
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7436
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7437 /* The symbol `xpm' identifying XPM-format images. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7438
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7439 Lisp_Object Qxpm;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7440
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7441 /* Indices of image specification fields in xpm_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7442
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7443 enum xpm_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7444 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7445 XPM_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7446 XPM_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7447 XPM_DATA,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7448 XPM_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7449 XPM_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7450 XPM_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7451 XPM_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7452 XPM_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7453 XPM_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7454 XPM_COLOR_SYMBOLS,
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7455 XPM_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7456 XPM_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7457 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7458
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7459 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7460 of valid XPM image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7461
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7462 static struct image_keyword xpm_format[XPM_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7463 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7464 {":type", IMAGE_SYMBOL_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7465 {":file", IMAGE_STRING_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7466 {":data", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
7467 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
7468 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7469 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
7470 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7471 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
7472 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7473 {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
7474 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7475 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7476
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7477 /* Structure describing the image type XBM. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7478
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7479 static struct image_type xpm_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7480 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7481 &Qxpm,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7482 xpm_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7483 xpm_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7484 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7485 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7486 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7487
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7488
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7489 /* Define ALLOC_XPM_COLORS if we can use Emacs' own color allocation
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7490 functions for allocating image colors. Our own functions handle
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7491 color allocation failures more gracefully than the ones on the XPM
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7492 lib. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7493
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7494 #if defined XpmAllocColor && defined XpmFreeColors && defined XpmColorClosure
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7495 #define ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7496 #endif
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7497
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7498 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7499
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7500 static void xpm_init_color_cache P_ ((struct frame *, XpmAttributes *));
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7501 static void xpm_free_color_cache P_ ((void));
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7502 static int xpm_lookup_color P_ ((struct frame *, char *, XColor *));
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7503 static int xpm_color_bucket P_ ((char *));
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7504 static struct xpm_cached_color *xpm_cache_color P_ ((struct frame *, char *,
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7505 XColor *, int));
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7506
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7507 /* An entry in a hash table used to cache color definitions of named
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7508 colors. This cache is necessary to speed up XPM image loading in
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7509 case we do color allocations ourselves. Without it, we would need
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7510 a call to XParseColor per pixel in the image. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7511
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7512 struct xpm_cached_color
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7513 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7514 /* Next in collision chain. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7515 struct xpm_cached_color *next;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7516
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7517 /* Color definition (RGB and pixel color). */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7518 XColor color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7519
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7520 /* Color name. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7521 char name[1];
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7522 };
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7523
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7524 /* The hash table used for the color cache, and its bucket vector
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7525 size. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7526
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7527 #define XPM_COLOR_CACHE_BUCKETS 1001
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7528 struct xpm_cached_color **xpm_color_cache;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7529
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7530 /* Initialize the color cache. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7531
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7532 static void
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7533 xpm_init_color_cache (f, attrs)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7534 struct frame *f;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7535 XpmAttributes *attrs;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7536 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7537 size_t nbytes = XPM_COLOR_CACHE_BUCKETS * sizeof *xpm_color_cache;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7538 xpm_color_cache = (struct xpm_cached_color **) xmalloc (nbytes);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7539 memset (xpm_color_cache, 0, nbytes);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7540 init_color_table ();
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7541
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7542 if (attrs->valuemask & XpmColorSymbols)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7543 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7544 int i;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7545 XColor color;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7546
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7547 for (i = 0; i < attrs->numsymbols; ++i)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7548 if (XParseColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f),
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7549 attrs->colorsymbols[i].value, &color))
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7550 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7551 color.pixel = lookup_rgb_color (f, color.red, color.green,
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7552 color.blue);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7553 xpm_cache_color (f, attrs->colorsymbols[i].name, &color, -1);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7554 }
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7555 }
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7556 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7557
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7558
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7559 /* Free the color cache. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7560
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7561 static void
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7562 xpm_free_color_cache ()
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7563 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7564 struct xpm_cached_color *p, *next;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7565 int i;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7566
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7567 for (i = 0; i < XPM_COLOR_CACHE_BUCKETS; ++i)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7568 for (p = xpm_color_cache[i]; p; p = next)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7569 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7570 next = p->next;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7571 xfree (p);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7572 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7573
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7574 xfree (xpm_color_cache);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7575 xpm_color_cache = NULL;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7576 free_color_table ();
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7577 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7578
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7579
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7580 /* Return the bucket index for color named COLOR_NAME in the color
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7581 cache. */
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7582
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7583 static int
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7584 xpm_color_bucket (color_name)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7585 char *color_name;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7586 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7587 unsigned h = 0;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7588 char *s;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7589
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7590 for (s = color_name; *s; ++s)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7591 h = (h << 2) ^ *s;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7592 return h %= XPM_COLOR_CACHE_BUCKETS;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7593 }
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7594
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7595
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7596 /* On frame F, cache values COLOR for color with name COLOR_NAME.
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7597 BUCKET, if >= 0, is a precomputed bucket index. Value is the cache
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7598 entry added. */
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7599
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7600 static struct xpm_cached_color *
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7601 xpm_cache_color (f, color_name, color, bucket)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7602 struct frame *f;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7603 char *color_name;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7604 XColor *color;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7605 int bucket;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7606 {
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7607 size_t nbytes;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7608 struct xpm_cached_color *p;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7609
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7610 if (bucket < 0)
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7611 bucket = xpm_color_bucket (color_name);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7612
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7613 nbytes = sizeof *p + strlen (color_name);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7614 p = (struct xpm_cached_color *) xmalloc (nbytes);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7615 strcpy (p->name, color_name);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7616 p->color = *color;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7617 p->next = xpm_color_cache[bucket];
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7618 xpm_color_cache[bucket] = p;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7619 return p;
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7620 }
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7621
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7622
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7623 /* Look up color COLOR_NAME for frame F in the color cache. If found,
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7624 return the cached definition in *COLOR. Otherwise, make a new
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7625 entry in the cache and allocate the color. Value is zero if color
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7626 allocation failed. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7627
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7628 static int
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7629 xpm_lookup_color (f, color_name, color)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7630 struct frame *f;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7631 char *color_name;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7632 XColor *color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7633 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7634 struct xpm_cached_color *p;
32536
c198e3edcae6 Revert last change.
Miles Bader <miles@gnu.org>
parents: 32524
diff changeset
7635 int h = xpm_color_bucket (color_name);
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7636
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7637 for (p = xpm_color_cache[h]; p; p = p->next)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7638 if (strcmp (p->name, color_name) == 0)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7639 break;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7640
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7641 if (p != NULL)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7642 *color = p->color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7643 else if (XParseColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f),
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7644 color_name, color))
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7645 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7646 color->pixel = lookup_rgb_color (f, color->red, color->green,
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7647 color->blue);
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7648 p = xpm_cache_color (f, color_name, color, h);
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7649 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7650
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7651 return p != NULL;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7652 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7653
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7654
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7655 /* Callback for allocating color COLOR_NAME. Called from the XPM lib.
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7656 CLOSURE is a pointer to the frame on which we allocate the
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7657 color. Return in *COLOR the allocated color. Value is non-zero
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7658 if successful. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7659
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7660 static int
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7661 xpm_alloc_color (dpy, cmap, color_name, color, closure)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7662 Display *dpy;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7663 Colormap cmap;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7664 char *color_name;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7665 XColor *color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7666 void *closure;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7667 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7668 return xpm_lookup_color ((struct frame *) closure, color_name, color);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7669 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7670
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7671
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7672 /* Callback for freeing NPIXELS colors contained in PIXELS. CLOSURE
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7673 is a pointer to the frame on which we allocate the color. Value is
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7674 non-zero if successful. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7675
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7676 static int
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7677 xpm_free_colors (dpy, cmap, pixels, npixels, closure)
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7678 Display *dpy;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7679 Colormap cmap;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7680 Pixel *pixels;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7681 int npixels;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7682 void *closure;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7683 {
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7684 return 1;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7685 }
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7686
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7687 #endif /* ALLOC_XPM_COLORS */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7688
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7689
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7690 /* Value is non-zero if COLOR_SYMBOLS is a valid color symbols list
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7691 for XPM images. Such a list must consist of conses whose car and
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7692 cdr are strings. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7693
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7694 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7695 xpm_valid_color_symbols_p (color_symbols)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7696 Lisp_Object color_symbols;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7697 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7698 while (CONSP (color_symbols))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7699 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7700 Lisp_Object sym = XCAR (color_symbols);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7701 if (!CONSP (sym)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7702 || !STRINGP (XCAR (sym))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7703 || !STRINGP (XCDR (sym)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7704 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7705 color_symbols = XCDR (color_symbols);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7706 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7707
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7708 return NILP (color_symbols);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7709 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7710
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7711
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7712 /* Value is non-zero if OBJECT is a valid XPM image specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7713
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7714 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7715 xpm_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7716 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7717 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7718 struct image_keyword fmt[XPM_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7719 bcopy (xpm_format, fmt, sizeof fmt);
26401
9457656ded8b (QCuser_data): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 26304
diff changeset
7720 return (parse_image_spec (object, fmt, XPM_LAST, Qxpm)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7721 /* Either `:file' or `:data' must be present. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7722 && fmt[XPM_FILE].count + fmt[XPM_DATA].count == 1
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7723 /* Either no `:color-symbols' or it's a list of conses
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7724 whose car and cdr are strings. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7725 && (fmt[XPM_COLOR_SYMBOLS].count == 0
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
7726 || xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value)));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7727 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7728
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7729
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7730 /* Load image IMG which will be displayed on frame F. Value is
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7731 non-zero if successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7732
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7733 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7734 xpm_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7735 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7736 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7737 {
34976
05c36b1fa618 (x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents: 34911
diff changeset
7738 int rc;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7739 XpmAttributes attrs;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7740 Lisp_Object specified_file, color_symbols;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7741
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7742 /* Configure the XPM lib. Use the visual of frame F. Allocate
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7743 close colors. Return colors allocated. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7744 bzero (&attrs, sizeof attrs);
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7745 attrs.visual = FRAME_X_VISUAL (f);
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7746 attrs.colormap = FRAME_X_COLORMAP (f);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7747 attrs.valuemask |= XpmVisual;
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7748 attrs.valuemask |= XpmColormap;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7749
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7750 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7751 /* Allocate colors with our own functions which handle
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7752 failing color allocation more gracefully. */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7753 attrs.color_closure = f;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7754 attrs.alloc_color = xpm_alloc_color;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7755 attrs.free_colors = xpm_free_colors;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7756 attrs.valuemask |= XpmAllocColor | XpmFreeColors | XpmColorClosure;
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7757 #else /* not ALLOC_XPM_COLORS */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7758 /* Let the XPM lib allocate colors. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7759 attrs.valuemask |= XpmReturnAllocPixels;
25200
8ab4da818dc0 (xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents: 25153
diff changeset
7760 #ifdef XpmAllocCloseColors
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7761 attrs.alloc_close_colors = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7762 attrs.valuemask |= XpmAllocCloseColors;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7763 #else /* not XpmAllocCloseColors */
25200
8ab4da818dc0 (xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents: 25153
diff changeset
7764 attrs.closeness = 600;
8ab4da818dc0 (xpm_load) [!XpmAllocCloseColors]:
Richard M. Stallman <rms@gnu.org>
parents: 25153
diff changeset
7765 attrs.valuemask |= XpmCloseness;
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7766 #endif /* not XpmAllocCloseColors */
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7767 #endif /* ALLOC_XPM_COLORS */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7768
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7769 /* If image specification contains symbolic color definitions, add
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7770 these to `attrs'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7771 color_symbols = image_spec_value (img->spec, QCcolor_symbols, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7772 if (CONSP (color_symbols))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7773 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7774 Lisp_Object tail;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7775 XpmColorSymbol *xpm_syms;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7776 int i, size;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7777
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7778 attrs.valuemask |= XpmColorSymbols;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7779
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7780 /* Count number of symbols. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7781 attrs.numsymbols = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7782 for (tail = color_symbols; CONSP (tail); tail = XCDR (tail))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7783 ++attrs.numsymbols;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7784
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7785 /* Allocate an XpmColorSymbol array. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7786 size = attrs.numsymbols * sizeof *xpm_syms;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7787 xpm_syms = (XpmColorSymbol *) alloca (size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7788 bzero (xpm_syms, size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7789 attrs.colorsymbols = xpm_syms;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7790
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7791 /* Fill the color symbol array. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7792 for (tail = color_symbols, i = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7793 CONSP (tail);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7794 ++i, tail = XCDR (tail))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7795 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7796 Lisp_Object name = XCAR (XCAR (tail));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7797 Lisp_Object color = XCDR (XCAR (tail));
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7798 xpm_syms[i].name = (char *) alloca (SCHARS (name) + 1);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7799 strcpy (xpm_syms[i].name, SDATA (name));
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7800 xpm_syms[i].value = (char *) alloca (SCHARS (color) + 1);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7801 strcpy (xpm_syms[i].value, SDATA (color));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7802 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7803 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7804
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7805 /* Create a pixmap for the image, either from a file, or from a
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7806 string buffer containing data in the same format as an XPM file. */
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7807 #ifdef ALLOC_XPM_COLORS
31761
d9efa91b06ab (xpm_init_color_cache) [ALLOC_XPM_COLORS]: If color
Gerd Moellmann <gerd@gnu.org>
parents: 31693
diff changeset
7808 xpm_init_color_cache (f, &attrs);
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7809 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7810
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7811 specified_file = image_spec_value (img->spec, QCfile, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7812 if (STRINGP (specified_file))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7813 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7814 Lisp_Object file = x_find_image_file (specified_file);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7815 if (!STRINGP (file))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7816 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
7817 image_error ("Cannot find image file `%s'", specified_file, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7818 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7819 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7820
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7821 rc = XpmReadFileToPixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7822 SDATA (file), &img->pixmap, &img->mask,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7823 &attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7824 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7825 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7826 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7827 Lisp_Object buffer = image_spec_value (img->spec, QCdata, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7828 rc = XpmCreatePixmapFromBuffer (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
7829 SDATA (buffer),
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7830 &img->pixmap, &img->mask,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7831 &attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7832 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7833
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7834 if (rc == XpmSuccess)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7835 {
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7836 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7837 img->colors = colors_in_color_table (&img->ncolors);
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7838 #else /* not ALLOC_XPM_COLORS */
35146
9b49ba6631c5 * xfns.c (xpm_load) [!ALLOC_XPM_COLORS]: Declare local variable I in inner block.
Ken Raeburn <raeburn@raeburn.org>
parents: 35068
diff changeset
7839 int i;
9b49ba6631c5 * xfns.c (xpm_load) [!ALLOC_XPM_COLORS]: Declare local variable I in inner block.
Ken Raeburn <raeburn@raeburn.org>
parents: 35068
diff changeset
7840
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7841 img->ncolors = attrs.nalloc_pixels;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7842 img->colors = (unsigned long *) xmalloc (img->ncolors
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7843 * sizeof *img->colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7844 for (i = 0; i < attrs.nalloc_pixels; ++i)
28597
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7845 {
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7846 img->colors[i] = attrs.alloc_pixels[i];
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7847 #ifdef DEBUG_X_COLORS
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7848 register_color (img->colors[i]);
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7849 #endif
6bbcb7e674b1 (xpm_load) [DEBUG_X_COLORS]: Register colors.
Gerd Moellmann <gerd@gnu.org>
parents: 28464
diff changeset
7850 }
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7851 #endif /* not ALLOC_XPM_COLORS */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7852
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7853 img->width = attrs.width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7854 img->height = attrs.height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7855 xassert (img->width > 0 && img->height > 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7856
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7857 /* The call to XpmFreeAttributes below frees attrs.alloc_pixels. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7858 XpmFreeAttributes (&attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7859 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7860 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7861 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7862 switch (rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7863 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7864 case XpmOpenFailed:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7865 image_error ("Error opening XPM file (%s)", img->spec, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7866 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7867
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7868 case XpmFileInvalid:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7869 image_error ("Invalid XPM file (%s)", img->spec, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7870 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7871
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7872 case XpmNoMemory:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7873 image_error ("Out of memory (%s)", img->spec, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7874 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7875
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7876 case XpmColorFailed:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7877 image_error ("Color allocation error (%s)", img->spec, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7878 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7879
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7880 default:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7881 image_error ("Unknown error (%s)", img->spec, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7882 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7883 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7884 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7885
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7886 #ifdef ALLOC_XPM_COLORS
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7887 xpm_free_color_cache ();
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
7888 #endif
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7889 return rc == XpmSuccess;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7890 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7891
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7892 #endif /* HAVE_XPM != 0 */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7893
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7894
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7895 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7896 Color table
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7897 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7898
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7899 /* An entry in the color table mapping an RGB color to a pixel color. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7900
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7901 struct ct_color
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7902 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7903 int r, g, b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7904 unsigned long pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7905
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7906 /* Next in color table collision list. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7907 struct ct_color *next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7908 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7909
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7910 /* The bucket vector size to use. Must be prime. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7911
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7912 #define CT_SIZE 101
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7913
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7914 /* Value is a hash of the RGB color given by R, G, and B. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7915
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7916 #define CT_HASH_RGB(R, G, B) (((R) << 16) ^ ((G) << 8) ^ (B))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7917
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7918 /* The color hash table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7919
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7920 struct ct_color **ct_table;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7921
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7922 /* Number of entries in the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7923
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7924 int ct_colors_allocated;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7925
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7926 /* Initialize the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7927
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7928 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7929 init_color_table ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7930 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7931 int size = CT_SIZE * sizeof (*ct_table);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7932 ct_table = (struct ct_color **) xmalloc (size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7933 bzero (ct_table, size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7934 ct_colors_allocated = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7935 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7936
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7937
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7938 /* Free memory associated with the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7939
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7940 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7941 free_color_table ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7942 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7943 int i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7944 struct ct_color *p, *next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7945
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7946 for (i = 0; i < CT_SIZE; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7947 for (p = ct_table[i]; p; p = next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7948 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7949 next = p->next;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7950 xfree (p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7951 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7952
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7953 xfree (ct_table);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7954 ct_table = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7955 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7956
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7957
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7958 /* Value is a pixel color for RGB color R, G, B on frame F. If an
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7959 entry for that color already is in the color table, return the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7960 pixel color of that entry. Otherwise, allocate a new color for R,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7961 G, B, and make an entry in the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7962
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7963 static unsigned long
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7964 lookup_rgb_color (f, r, g, b)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7965 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7966 int r, g, b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7967 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7968 unsigned hash = CT_HASH_RGB (r, g, b);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7969 int i = hash % CT_SIZE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7970 struct ct_color *p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7971
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7972 for (p = ct_table[i]; p; p = p->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7973 if (p->r == r && p->g == g && p->b == b)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7974 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7975
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7976 if (p == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7977 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7978 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7979 Colormap cmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7980 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7981
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7982 color.red = r;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7983 color.green = g;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7984 color.blue = b;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7985
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
7986 cmap = FRAME_X_COLORMAP (f);
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
7987 rc = x_alloc_nearest_color (f, cmap, &color);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7988
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7989 if (rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7990 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7991 ++ct_colors_allocated;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7992
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7993 p = (struct ct_color *) xmalloc (sizeof *p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7994 p->r = r;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7995 p->g = g;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7996 p->b = b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7997 p->pixel = color.pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7998 p->next = ct_table[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
7999 ct_table[i] = p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8000 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8001 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8002 return FRAME_FOREGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8003 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8004
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8005 return p->pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8006 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8007
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8008
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8009 /* Look up pixel color PIXEL which is used on frame F in the color
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8010 table. If not already present, allocate it. Value is PIXEL. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8011
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8012 static unsigned long
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8013 lookup_pixel_color (f, pixel)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8014 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8015 unsigned long pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8016 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8017 int i = pixel % CT_SIZE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8018 struct ct_color *p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8019
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8020 for (p = ct_table[i]; p; p = p->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8021 if (p->pixel == pixel)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8022 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8023
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8024 if (p == NULL)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8025 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8026 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8027 Colormap cmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8028 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8029
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
8030 cmap = FRAME_X_COLORMAP (f);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8031 color.pixel = pixel;
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
8032 x_query_color (f, &color);
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
8033 rc = x_alloc_nearest_color (f, cmap, &color);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8034
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8035 if (rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8036 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8037 ++ct_colors_allocated;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8038
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8039 p = (struct ct_color *) xmalloc (sizeof *p);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8040 p->r = color.red;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8041 p->g = color.green;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8042 p->b = color.blue;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8043 p->pixel = pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8044 p->next = ct_table[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8045 ct_table[i] = p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8046 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8047 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8048 return FRAME_FOREGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8049 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8050
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8051 return p->pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8052 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8053
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8054
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8055 /* Value is a vector of all pixel colors contained in the color table,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8056 allocated via xmalloc. Set *N to the number of colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8057
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8058 static unsigned long *
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8059 colors_in_color_table (n)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8060 int *n;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8061 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8062 int i, j;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8063 struct ct_color *p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8064 unsigned long *colors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8065
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8066 if (ct_colors_allocated == 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8067 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8068 *n = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8069 colors = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8070 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8071 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8072 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8073 colors = (unsigned long *) xmalloc (ct_colors_allocated
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8074 * sizeof *colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8075 *n = ct_colors_allocated;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8076
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8077 for (i = j = 0; i < CT_SIZE; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8078 for (p = ct_table[i]; p; p = p->next)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8079 colors[j++] = p->pixel;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8080 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8081
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8082 return colors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8083 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8084
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8085
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8086
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8087 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8088 Algorithms
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8089 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8090
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8091 static XColor *x_to_xcolors P_ ((struct frame *, struct image *, int));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8092 static void x_from_xcolors P_ ((struct frame *, struct image *, XColor *));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8093 static void x_detect_edges P_ ((struct frame *, struct image *, int[9], int));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8094
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
8095 /* Non-zero means draw a cross on images having `:conversion
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8096 disabled'. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8097
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8098 int cross_disabled_images;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8099
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8100 /* Edge detection matrices for different edge-detection
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8101 strategies. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8102
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8103 static int emboss_matrix[9] = {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8104 /* x - 1 x x + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8105 2, -1, 0, /* y - 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8106 -1, 0, 1, /* y */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8107 0, 1, -2 /* y + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8108 };
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8109
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8110 static int laplace_matrix[9] = {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8111 /* x - 1 x x + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8112 1, 0, 0, /* y - 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8113 0, 0, 0, /* y */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8114 0, 0, -1 /* y + 1 */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8115 };
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8116
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8117 /* Value is the intensity of the color whose red/green/blue values
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8118 are R, G, and B. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8119
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8120 #define COLOR_INTENSITY(R, G, B) ((2 * (R) + 3 * (G) + (B)) / 6)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8121
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8122
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8123 /* On frame F, return an array of XColor structures describing image
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8124 IMG->pixmap. Each XColor structure has its pixel color set. RGB_P
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8125 non-zero means also fill the red/green/blue members of the XColor
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8126 structures. Value is a pointer to the array of XColors structures,
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8127 allocated with xmalloc; it must be freed by the caller. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8128
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8129 static XColor *
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8130 x_to_xcolors (f, img, rgb_p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8131 struct frame *f;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8132 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8133 int rgb_p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8134 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8135 int x, y;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8136 XColor *colors, *p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8137 XImage *ximg;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8138
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8139 colors = (XColor *) xmalloc (img->width * img->height * sizeof *colors);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8140
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8141 /* Get the X image IMG->pixmap. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8142 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap,
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8143 0, 0, img->width, img->height, ~0, ZPixmap);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8144
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8145 /* Fill the `pixel' members of the XColor array. I wished there
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8146 were an easy and portable way to circumvent XGetPixel. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8147 p = colors;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8148 for (y = 0; y < img->height; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8149 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8150 XColor *row = p;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8151
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8152 for (x = 0; x < img->width; ++x, ++p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8153 p->pixel = XGetPixel (ximg, x, y);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8154
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8155 if (rgb_p)
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
8156 x_query_colors (f, row, img->width);
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8157 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8158
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8159 XDestroyImage (ximg);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8160 return colors;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8161 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8162
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8163
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8164 /* Create IMG->pixmap from an array COLORS of XColor structures, whose
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8165 RGB members are set. F is the frame on which this all happens.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8166 COLORS will be freed; an existing IMG->pixmap will be freed, too. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8167
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8168 static void
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8169 x_from_xcolors (f, img, colors)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8170 struct frame *f;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8171 struct image *img;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8172 XColor *colors;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8173 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8174 int x, y;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8175 XImage *oimg;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8176 Pixmap pixmap;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8177 XColor *p;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8178
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8179 init_color_table ();
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8180
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8181 x_create_x_image_and_pixmap (f, img->width, img->height, 0,
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8182 &oimg, &pixmap);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8183 p = colors;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8184 for (y = 0; y < img->height; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8185 for (x = 0; x < img->width; ++x, ++p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8186 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8187 unsigned long pixel;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8188 pixel = lookup_rgb_color (f, p->red, p->green, p->blue);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8189 XPutPixel (oimg, x, y, pixel);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8190 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8191
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8192 xfree (colors);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
8193 x_clear_image_1 (f, img, 1, 0, 1);
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8194
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8195 x_put_x_image (f, oimg, pixmap, img->width, img->height);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8196 x_destroy_x_image (oimg);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8197 img->pixmap = pixmap;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8198 img->colors = colors_in_color_table (&img->ncolors);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8199 free_color_table ();
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8200 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8201
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8202
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8203 /* On frame F, perform edge-detection on image IMG.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8204
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8205 MATRIX is a nine-element array specifying the transformation
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8206 matrix. See emboss_matrix for an example.
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8207
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8208 COLOR_ADJUST is a color adjustment added to each pixel of the
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8209 outgoing image. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8210
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8211 static void
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8212 x_detect_edges (f, img, matrix, color_adjust)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8213 struct frame *f;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8214 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8215 int matrix[9], color_adjust;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8216 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8217 XColor *colors = x_to_xcolors (f, img, 1);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8218 XColor *new, *p;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8219 int x, y, i, sum;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8220
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8221 for (i = sum = 0; i < 9; ++i)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8222 sum += abs (matrix[i]);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8223
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8224 #define COLOR(A, X, Y) ((A) + (Y) * img->width + (X))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8225
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8226 new = (XColor *) xmalloc (img->width * img->height * sizeof *new);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8227
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8228 for (y = 0; y < img->height; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8229 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8230 p = COLOR (new, 0, y);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8231 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8232 p = COLOR (new, img->width - 1, y);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8233 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8234 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8235
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8236 for (x = 1; x < img->width - 1; ++x)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8237 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8238 p = COLOR (new, x, 0);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8239 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8240 p = COLOR (new, x, img->height - 1);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8241 p->red = p->green = p->blue = 0xffff/2;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8242 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8243
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8244 for (y = 1; y < img->height - 1; ++y)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8245 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8246 p = COLOR (new, 1, y);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8247
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8248 for (x = 1; x < img->width - 1; ++x, ++p)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8249 {
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8250 int r, g, b, y1, x1;
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8251
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8252 r = g = b = i = 0;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8253 for (y1 = y - 1; y1 < y + 2; ++y1)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8254 for (x1 = x - 1; x1 < x + 2; ++x1, ++i)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8255 if (matrix[i])
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8256 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8257 XColor *t = COLOR (colors, x1, y1);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8258 r += matrix[i] * t->red;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8259 g += matrix[i] * t->green;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8260 b += matrix[i] * t->blue;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8261 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8262
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8263 r = (r / sum + color_adjust) & 0xffff;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8264 g = (g / sum + color_adjust) & 0xffff;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8265 b = (b / sum + color_adjust) & 0xffff;
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8266 p->red = p->green = p->blue = COLOR_INTENSITY (r, g, b);
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8267 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8268 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8269
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8270 xfree (colors);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8271 x_from_xcolors (f, img, new);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8272
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8273 #undef COLOR
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8274 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8275
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8276
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8277 /* Perform the pre-defined `emboss' edge-detection on image IMG
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8278 on frame F. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8279
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8280 static void
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8281 x_emboss (f, img)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8282 struct frame *f;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8283 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8284 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8285 x_detect_edges (f, img, emboss_matrix, 0xffff / 2);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8286 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8287
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8288
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8289 /* Perform the pre-defined `laplace' edge-detection on image IMG
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8290 on frame F. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8291
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8292 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8293 x_laplace (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8294 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8295 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8296 {
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8297 x_detect_edges (f, img, laplace_matrix, 45000);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8298 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8299
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8300
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8301 /* Perform edge-detection on image IMG on frame F, with specified
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8302 transformation matrix MATRIX and color-adjustment COLOR_ADJUST.
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8303
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8304 MATRIX must be either
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8305
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8306 - a list of at least 9 numbers in row-major form
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8307 - a vector of at least 9 numbers
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8308
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8309 COLOR_ADJUST nil means use a default; otherwise it must be a
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8310 number. */
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8311
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8312 static void
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8313 x_edge_detection (f, img, matrix, color_adjust)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8314 struct frame *f;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8315 struct image *img;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8316 Lisp_Object matrix, color_adjust;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8317 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8318 int i = 0;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8319 int trans[9];
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8320
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8321 if (CONSP (matrix))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8322 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8323 for (i = 0;
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8324 i < 9 && CONSP (matrix) && NUMBERP (XCAR (matrix));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8325 ++i, matrix = XCDR (matrix))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8326 trans[i] = XFLOATINT (XCAR (matrix));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8327 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8328 else if (VECTORP (matrix) && ASIZE (matrix) >= 9)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8329 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8330 for (i = 0; i < 9 && NUMBERP (AREF (matrix, i)); ++i)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8331 trans[i] = XFLOATINT (AREF (matrix, i));
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8332 }
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8333
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8334 if (NILP (color_adjust))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8335 color_adjust = make_number (0xffff / 2);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8336
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8337 if (i == 9 && NUMBERP (color_adjust))
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8338 x_detect_edges (f, img, trans, (int) XFLOATINT (color_adjust));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8339 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8340
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8341
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8342 /* Transform image IMG on frame F so that it looks disabled. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8343
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8344 static void
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8345 x_disable_image (f, img)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8346 struct frame *f;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8347 struct image *img;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8348 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8349 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
8350
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8351 if (dpyinfo->n_planes >= 2)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8352 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8353 /* Color (or grayscale). Convert to gray, and equalize. Just
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8354 drawing such images with a stipple can look very odd, so
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8355 we're using this method instead. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8356 XColor *colors = x_to_xcolors (f, img, 1);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8357 XColor *p, *end;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8358 const int h = 15000;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8359 const int l = 30000;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8360
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8361 for (p = colors, end = colors + img->width * img->height;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8362 p < end;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8363 ++p)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8364 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8365 int i = COLOR_INTENSITY (p->red, p->green, p->blue);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8366 int i2 = (0xffff - h - l) * i / 0xffff + l;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8367 p->red = p->green = p->blue = i2;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8368 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8369
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8370 x_from_xcolors (f, img, colors);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8371 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8372
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8373 /* Draw a cross over the disabled image, if we must or if we
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8374 should. */
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8375 if (dpyinfo->n_planes < 2 || cross_disabled_images)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8376 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8377 Display *dpy = FRAME_X_DISPLAY (f);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8378 GC gc;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8379
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8380 gc = XCreateGC (dpy, img->pixmap, 0, NULL);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8381 XSetForeground (dpy, gc, BLACK_PIX_DEFAULT (f));
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8382 XDrawLine (dpy, img->pixmap, gc, 0, 0,
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8383 img->width - 1, img->height - 1);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8384 XDrawLine (dpy, img->pixmap, gc, 0, img->height - 1,
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8385 img->width - 1, 0);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8386 XFreeGC (dpy, gc);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8387
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8388 if (img->mask)
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8389 {
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8390 gc = XCreateGC (dpy, img->mask, 0, NULL);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8391 XSetForeground (dpy, gc, WHITE_PIX_DEFAULT (f));
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8392 XDrawLine (dpy, img->mask, gc, 0, 0,
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8393 img->width - 1, img->height - 1);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8394 XDrawLine (dpy, img->mask, gc, 0, img->height - 1,
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8395 img->width - 1, 0);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8396 XFreeGC (dpy, gc);
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8397 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8398 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8399 }
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8400
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
8401
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8402 /* Build a mask for image IMG which is used on frame F. FILE is the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8403 name of an image file, for error messages. HOW determines how to
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8404 determine the background color of IMG. If it is a list '(R G B)',
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8405 with R, G, and B being integers >= 0, take that as the color of the
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8406 background. Otherwise, determine the background color of IMG
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8407 heuristically. Value is non-zero if successful. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8408
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8409 static int
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8410 x_build_heuristic_mask (f, img, how)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8411 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8412 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8413 Lisp_Object how;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8414 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8415 Display *dpy = FRAME_X_DISPLAY (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8416 XImage *ximg, *mask_img;
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8417 int x, y, rc, use_img_background;
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8418 unsigned long bg = 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8419
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8420 if (img->mask)
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8421 {
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8422 XFreePixmap (FRAME_X_DISPLAY (f), img->mask);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
8423 img->mask = None;
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8424 img->background_transparent_valid = 0;
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
8425 }
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
8426
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8427 /* Create an image and pixmap serving as mask. */
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8428 rc = x_create_x_image_and_pixmap (f, img->width, img->height, 1,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8429 &mask_img, &img->mask);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8430 if (!rc)
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
8431 return 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8432
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8433 /* Get the X image of IMG->pixmap. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8434 ximg = XGetImage (dpy, img->pixmap, 0, 0, img->width, img->height,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8435 ~0, ZPixmap);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8436
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8437 /* Determine the background color of ximg. If HOW is `(R G B)'
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8438 take that as color. Otherwise, use the image's background color. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8439 use_img_background = 1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8440
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8441 if (CONSP (how))
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8442 {
40421
1eec9125d32e (x_build_heuristic_mask): Fix a bug not incrementing
Gerd Moellmann <gerd@gnu.org>
parents: 40325
diff changeset
8443 int rgb[3], i;
1eec9125d32e (x_build_heuristic_mask): Fix a bug not incrementing
Gerd Moellmann <gerd@gnu.org>
parents: 40325
diff changeset
8444
1eec9125d32e (x_build_heuristic_mask): Fix a bug not incrementing
Gerd Moellmann <gerd@gnu.org>
parents: 40325
diff changeset
8445 for (i = 0; i < 3 && CONSP (how) && NATNUMP (XCAR (how)); ++i)
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8446 {
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8447 rgb[i] = XFASTINT (XCAR (how)) & 0xffff;
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8448 how = XCDR (how);
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8449 }
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8450
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8451 if (i == 3 && NILP (how))
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8452 {
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8453 char color_name[30];
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8454 sprintf (color_name, "#%04x%04x%04x", rgb[0], rgb[1], rgb[2]);
40427
979757645800 (x_build_heuristic_mask): Use x_alloc_image_color.
Gerd Moellmann <gerd@gnu.org>
parents: 40421
diff changeset
8455 bg = x_alloc_image_color (f, img, build_string (color_name), 0);
979757645800 (x_build_heuristic_mask): Use x_alloc_image_color.
Gerd Moellmann <gerd@gnu.org>
parents: 40421
diff changeset
8456 use_img_background = 0;
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8457 }
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
8458 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8459
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8460 if (use_img_background)
40608
134b236ad704 (x_build_heuristic_mask): Use four_corners_best
Gerd Moellmann <gerd@gnu.org>
parents: 40606
diff changeset
8461 bg = four_corners_best (ximg, img->width, img->height);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8462
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8463 /* Set all bits in mask_img to 1 whose color in ximg is different
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8464 from the background color bg. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8465 for (y = 0; y < img->height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8466 for (x = 0; x < img->width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8467 XPutPixel (mask_img, x, y, XGetPixel (ximg, x, y) != bg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8468
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8469 /* Fill in the background_transparent field while we have the mask handy. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8470 image_background_transparent (img, f, mask_img);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8471
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8472 /* Put mask_img into img->mask. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8473 x_put_x_image (f, mask_img, img->mask, img->width, img->height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8474 x_destroy_x_image (mask_img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8475 XDestroyImage (ximg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8476
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8477 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8478 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8479
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8480
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8481
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8482 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8483 PBM (mono, gray, color)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8484 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8485
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8486 static int pbm_image_p P_ ((Lisp_Object object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8487 static int pbm_load P_ ((struct frame *f, struct image *img));
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8488 static int pbm_scan_number P_ ((unsigned char **, unsigned char *));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8489
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8490 /* The symbol `pbm' identifying images of this type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8491
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8492 Lisp_Object Qpbm;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8493
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8494 /* Indices of image specification fields in gs_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8495
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8496 enum pbm_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8497 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8498 PBM_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8499 PBM_FILE,
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8500 PBM_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8501 PBM_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8502 PBM_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8503 PBM_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8504 PBM_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8505 PBM_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8506 PBM_MASK,
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8507 PBM_FOREGROUND,
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8508 PBM_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8509 PBM_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8510 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8511
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8512 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8513 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8514
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8515 static struct image_keyword pbm_format[PBM_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8516 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8517 {":type", IMAGE_SYMBOL_VALUE, 1},
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8518 {":file", IMAGE_STRING_VALUE, 0},
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8519 {":data", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8520 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
8521 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8522 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
8523 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8524 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8525 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
8526 {":foreground", IMAGE_STRING_OR_NIL_VALUE, 0},
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
8527 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8528 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8529
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8530 /* Structure describing the image type `pbm'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8531
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8532 static struct image_type pbm_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8533 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8534 &Qpbm,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8535 pbm_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8536 pbm_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8537 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8538 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8539 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8540
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8541
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8542 /* Return non-zero if OBJECT is a valid PBM image specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8543
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8544 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8545 pbm_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8546 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8547 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8548 struct image_keyword fmt[PBM_LAST];
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8549
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8550 bcopy (pbm_format, fmt, sizeof fmt);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8551
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8552 if (!parse_image_spec (object, fmt, PBM_LAST, Qpbm))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8553 return 0;
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8554
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8555 /* Must specify either :data or :file. */
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8556 return fmt[PBM_DATA].count + fmt[PBM_FILE].count == 1;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8557 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8558
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8559
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8560 /* Scan a decimal number from *S and return it. Advance *S while
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8561 reading the number. END is the end of the string. Value is -1 at
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8562 end of input. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8563
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8564 static int
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8565 pbm_scan_number (s, end)
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8566 unsigned char **s, *end;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8567 {
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8568 int c = 0, val = -1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8569
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8570 while (*s < end)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8571 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8572 /* Skip white-space. */
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8573 while (*s < end && (c = *(*s)++, isspace (c)))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8574 ;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8575
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8576 if (c == '#')
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8577 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8578 /* Skip comment to end of line. */
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8579 while (*s < end && (c = *(*s)++, c != '\n'))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8580 ;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8581 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8582 else if (isdigit (c))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8583 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8584 /* Read decimal number. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8585 val = c - '0';
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8586 while (*s < end && (c = *(*s)++, isdigit (c)))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8587 val = 10 * val + c - '0';
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8588 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8589 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8590 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8591 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8592 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8593
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8594 return val;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8595 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8596
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8597
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8598 /* Load PBM image IMG for use on frame F. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8599
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8600 static int
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8601 pbm_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8602 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8603 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8604 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8605 int raw_p, x, y;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
8606 int width, height, max_color_idx = 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8607 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8608 Lisp_Object file, specified_file;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8609 enum {PBM_MONO, PBM_GRAY, PBM_COLOR} type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8610 struct gcpro gcpro1;
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8611 unsigned char *contents = NULL;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8612 unsigned char *end, *p;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8613 int size;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8614
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8615 specified_file = image_spec_value (img->spec, QCfile, NULL);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8616 file = Qnil;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8617 GCPRO1 (file);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8618
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8619 if (STRINGP (specified_file))
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8620 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8621 file = x_find_image_file (specified_file);
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8622 if (!STRINGP (file))
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8623 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8624 image_error ("Cannot find image file `%s'", specified_file, Qnil);
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8625 UNGCPRO;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8626 return 0;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8627 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8628
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
8629 contents = slurp_file (SDATA (file), &size);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8630 if (contents == NULL)
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8631 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8632 image_error ("Error reading `%s'", file, Qnil);
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8633 UNGCPRO;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8634 return 0;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8635 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8636
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8637 p = contents;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8638 end = contents + size;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8639 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8640 else
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8641 {
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8642 Lisp_Object data;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8643 data = image_spec_value (img->spec, QCdata, NULL);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
8644 p = SDATA (data);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
8645 end = p + SBYTES (data);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8646 }
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8647
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8648 /* Check magic number. */
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8649 if (end - p < 2 || *p++ != 'P')
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8650 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8651 image_error ("Not a PBM image: `%s'", img->spec, Qnil);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8652 error:
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8653 xfree (contents);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8654 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8655 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8656 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8657
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8658 switch (*p++)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8659 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8660 case '1':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8661 raw_p = 0, type = PBM_MONO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8662 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8663
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8664 case '2':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8665 raw_p = 0, type = PBM_GRAY;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8666 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8667
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8668 case '3':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8669 raw_p = 0, type = PBM_COLOR;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8670 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8671
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8672 case '4':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8673 raw_p = 1, type = PBM_MONO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8674 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8675
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8676 case '5':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8677 raw_p = 1, type = PBM_GRAY;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8678 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8679
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8680 case '6':
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8681 raw_p = 1, type = PBM_COLOR;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8682 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8683
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8684 default:
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8685 image_error ("Not a PBM image: `%s'", img->spec, Qnil);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8686 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8687 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8688
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8689 /* Read width, height, maximum color-component. Characters
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8690 starting with `#' up to the end of a line are ignored. */
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8691 width = pbm_scan_number (&p, end);
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8692 height = pbm_scan_number (&p, end);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8693
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8694 if (type != PBM_MONO)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8695 {
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8696 max_color_idx = pbm_scan_number (&p, end);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8697 if (raw_p && max_color_idx > 255)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8698 max_color_idx = 255;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8699 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8700
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8701 if (width < 0
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8702 || height < 0
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8703 || (type != PBM_MONO && max_color_idx < 0))
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8704 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8705
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8706 if (!x_create_x_image_and_pixmap (f, width, height, 0,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8707 &ximg, &img->pixmap))
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
8708 goto error;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8709
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8710 /* Initialize the color hash table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8711 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8712
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8713 if (type == PBM_MONO)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8714 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8715 int c = 0, g;
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8716 struct image_keyword fmt[PBM_LAST];
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8717 unsigned long fg = FRAME_FOREGROUND_PIXEL (f);
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8718 unsigned long bg = FRAME_BACKGROUND_PIXEL (f);
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8719
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8720 /* Parse the image specification. */
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8721 bcopy (pbm_format, fmt, sizeof fmt);
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8722 parse_image_spec (img->spec, fmt, PBM_LAST, Qpbm);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8723
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8724 /* Get foreground and background colors, maybe allocate colors. */
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
8725 if (fmt[PBM_FOREGROUND].count
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
8726 && STRINGP (fmt[PBM_FOREGROUND].value))
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8727 fg = x_alloc_image_color (f, img, fmt[PBM_FOREGROUND].value, fg);
37946
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
8728 if (fmt[PBM_BACKGROUND].count
fe4457964ac0 (enum image_value_type): New enumerator
Gerd Moellmann <gerd@gnu.org>
parents: 37762
diff changeset
8729 && STRINGP (fmt[PBM_BACKGROUND].value))
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8730 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8731 bg = x_alloc_image_color (f, img, fmt[PBM_BACKGROUND].value, bg);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8732 img->background = bg;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8733 img->background_valid = 1;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8734 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8735
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8736 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8737 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8738 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8739 if (raw_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8740 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8741 if ((x & 7) == 0)
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8742 c = *p++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8743 g = c & 0x80;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8744 c <<= 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8745 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8746 else
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8747 g = pbm_scan_number (&p, end);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8748
32549
73521ea30674 (pbm_format): Add :foreground and :background keywords.
Gerd Moellmann <gerd@gnu.org>
parents: 32536
diff changeset
8749 XPutPixel (ximg, x, y, g ? fg : bg);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8750 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8751 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8752 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8753 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8754 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8755 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8756 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8757 int r, g, b;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8758
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8759 if (type == PBM_GRAY)
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8760 r = g = b = raw_p ? *p++ : pbm_scan_number (&p, end);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8761 else if (raw_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8762 {
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8763 r = *p++;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8764 g = *p++;
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8765 b = *p++;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8766 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8767 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8768 {
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8769 r = pbm_scan_number (&p, end);
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8770 g = pbm_scan_number (&p, end);
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8771 b = pbm_scan_number (&p, end);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8772 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8773
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8774 if (r < 0 || g < 0 || b < 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8775 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8776 xfree (ximg->data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8777 ximg->data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8778 XDestroyImage (ximg);
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8779 image_error ("Invalid pixel value in image `%s'",
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8780 img->spec, Qnil);
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8781 goto error;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8782 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8783
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8784 /* RGB values are now in the range 0..max_color_idx.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8785 Scale this to the range 0..0xffff supported by X. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8786 r = (double) r * 65535 / max_color_idx;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8787 g = (double) g * 65535 / max_color_idx;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8788 b = (double) b * 65535 / max_color_idx;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8789 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8790 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8791 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8792
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8793 /* Store in IMG->colors the colors allocated for the image, and
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8794 free the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8795 img->colors = colors_in_color_table (&img->ncolors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8796 free_color_table ();
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8797
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8798 /* Maybe fill in the background field while we have ximg handy. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8799 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8800 IMAGE_BACKGROUND (img, f, ximg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8801
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8802 /* Put the image into a pixmap. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8803 x_put_x_image (f, ximg, img->pixmap, width, height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8804 x_destroy_x_image (ximg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8805
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8806 img->width = width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8807 img->height = height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8808
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8809 UNGCPRO;
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8810 xfree (contents);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8811 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8812 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8813
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8814
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8815
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8816 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8817 PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8818 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8819
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8820 #if HAVE_PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8821
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8822 #include <png.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8823
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8824 /* Function prototypes. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8825
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8826 static int png_image_p P_ ((Lisp_Object object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8827 static int png_load P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8828
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8829 /* The symbol `png' identifying images of this type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8830
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8831 Lisp_Object Qpng;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8832
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8833 /* Indices of image specification fields in png_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8834
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8835 enum png_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8836 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8837 PNG_TYPE,
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8838 PNG_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8839 PNG_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8840 PNG_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8841 PNG_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8842 PNG_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8843 PNG_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8844 PNG_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8845 PNG_MASK,
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8846 PNG_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8847 PNG_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8848 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8849
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8850 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8851 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8852
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8853 static struct image_keyword png_format[PNG_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8854 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8855 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8856 {":data", IMAGE_STRING_VALUE, 0},
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8857 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8858 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
8859 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8860 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
8861 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
8862 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
40279
1adbc1480e83 (png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents: 40264
diff changeset
8863 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
8864 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8865 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8866
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
8867 /* Structure describing the image type `png'. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8868
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8869 static struct image_type png_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8870 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8871 &Qpng,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8872 png_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8873 png_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8874 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8875 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8876 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8877
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8878
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8879 /* Return non-zero if OBJECT is a valid PNG image specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8880
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8881 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8882 png_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8883 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8884 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8885 struct image_keyword fmt[PNG_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8886 bcopy (png_format, fmt, sizeof fmt);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8887
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
8888 if (!parse_image_spec (object, fmt, PNG_LAST, Qpng))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8889 return 0;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8890
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8891 /* Must specify either the :data or :file keyword. */
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
8892 return fmt[PNG_FILE].count + fmt[PNG_DATA].count == 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8893 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8894
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8895
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8896 /* Error and warning handlers installed when the PNG library
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8897 is initialized. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8898
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8899 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8900 my_png_error (png_ptr, msg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8901 png_struct *png_ptr;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8902 char *msg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8903 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8904 xassert (png_ptr != NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8905 image_error ("PNG error: %s", build_string (msg), Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8906 longjmp (png_ptr->jmpbuf, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8907 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8908
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8909
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8910 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8911 my_png_warning (png_ptr, msg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8912 png_struct *png_ptr;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8913 char *msg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8914 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8915 xassert (png_ptr != NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8916 image_error ("PNG warning: %s", build_string (msg), Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8917 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8918
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8919 /* Memory source for PNG decoding. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8920
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8921 struct png_memory_storage
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8922 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8923 unsigned char *bytes; /* The data */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8924 size_t len; /* How big is it? */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8925 int index; /* Where are we? */
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8926 };
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8927
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8928
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8929 /* Function set as reader function when reading PNG image from memory.
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8930 PNG_PTR is a pointer to the PNG control structure. Copy LENGTH
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8931 bytes from the input to DATA. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8932
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8933 static void
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8934 png_read_from_memory (png_ptr, data, length)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8935 png_structp png_ptr;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8936 png_bytep data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8937 png_size_t length;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8938 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8939 struct png_memory_storage *tbr
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8940 = (struct png_memory_storage *) png_get_io_ptr (png_ptr);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8941
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8942 if (length > tbr->len - tbr->index)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8943 png_error (png_ptr, "Read error");
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8944
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8945 bcopy (tbr->bytes + tbr->index, data, length);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8946 tbr->index = tbr->index + length;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8947 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8948
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8949 /* Load PNG image IMG for use on frame F. Value is non-zero if
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8950 successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8951
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8952 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8953 png_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8954 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8955 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8956 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8957 Lisp_Object file, specified_file;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8958 Lisp_Object specified_data;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
8959 int x, y, i;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8960 XImage *ximg, *mask_img = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8961 struct gcpro gcpro1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8962 png_struct *png_ptr = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8963 png_info *info_ptr = NULL, *end_info = NULL;
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8964 FILE *volatile fp = NULL;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8965 png_byte sig[8];
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8966 png_byte * volatile pixels = NULL;
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
8967 png_byte ** volatile rows = NULL;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8968 png_uint_32 width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8969 int bit_depth, color_type, interlace_type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8970 png_byte channels;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8971 png_uint_32 row_bytes;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8972 int transparent_p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8973 double screen_gamma, image_gamma;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8974 int intent;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8975 struct png_memory_storage tbr; /* Data to be read */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8976
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8977 /* Find out what file to load. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
8978 specified_file = image_spec_value (img->spec, QCfile, NULL);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8979 specified_data = image_spec_value (img->spec, QCdata, NULL);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8980 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8981 GCPRO1 (file);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8982
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8983 if (NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8984 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8985 file = x_find_image_file (specified_file);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8986 if (!STRINGP (file))
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
8987 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8988 image_error ("Cannot find image file `%s'", specified_file, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8989 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8990 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8991 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8992
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8993 /* Open the image file. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
8994 fp = fopen (SDATA (file), "rb");
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8995 if (!fp)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8996 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
8997 image_error ("Cannot open image file `%s'", file, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8998 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
8999 fclose (fp);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9000 return 0;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9001 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9002
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9003 /* Check PNG signature. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9004 if (fread (sig, 1, sizeof sig, fp) != sizeof sig
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9005 || !png_check_sig (sig, sizeof sig))
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9006 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9007 image_error ("Not a PNG file: `%s'", file, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9008 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9009 fclose (fp);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9010 return 0;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9011 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9012 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9013 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9014 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9015 /* Read from memory. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9016 tbr.bytes = SDATA (specified_data);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9017 tbr.len = SBYTES (specified_data);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9018 tbr.index = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9019
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9020 /* Check PNG signature. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9021 if (tbr.len < sizeof sig
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9022 || !png_check_sig (tbr.bytes, sizeof sig))
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9023 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9024 image_error ("Not a PNG image: `%s'", img->spec, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9025 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9026 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9027 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9028
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9029 /* Need to skip past the signature. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9030 tbr.bytes += sizeof (sig);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9031 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9032
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9033 /* Initialize read and info structs for PNG lib. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9034 png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9035 my_png_error, my_png_warning);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9036 if (!png_ptr)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9037 {
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9038 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9039 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9040 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9041 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9042
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9043 info_ptr = png_create_info_struct (png_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9044 if (!info_ptr)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9045 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9046 png_destroy_read_struct (&png_ptr, NULL, NULL);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9047 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9048 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9049 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9050 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9051
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9052 end_info = png_create_info_struct (png_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9053 if (!end_info)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9054 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9055 png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9056 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9057 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9058 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9059 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9060
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9061 /* Set error jump-back. We come back here when the PNG library
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9062 detects an error. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9063 if (setjmp (png_ptr->jmpbuf))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9064 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9065 error:
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9066 if (png_ptr)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9067 png_destroy_read_struct (&png_ptr, &info_ptr, &end_info);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9068 xfree (pixels);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9069 xfree (rows);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9070 if (fp) fclose (fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9071 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9072 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9073 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9074
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9075 /* Read image info. */
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9076 if (!NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9077 png_set_read_fn (png_ptr, (void *) &tbr, png_read_from_memory);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9078 else
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9079 png_init_io (png_ptr, fp);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9080
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9081 png_set_sig_bytes (png_ptr, sizeof sig);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9082 png_read_info (png_ptr, info_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9083 png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9084 &interlace_type, NULL, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9085
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9086 /* If image contains simply transparency data, we prefer to
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9087 construct a clipping mask. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9088 if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9089 transparent_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9090 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9091 transparent_p = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9092
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9093 /* This function is easier to write if we only have to handle
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9094 one data format: RGB or RGBA with 8 bits per channel. Let's
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9095 transform other formats into that format. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9096
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9097 /* Strip more than 8 bits per channel. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9098 if (bit_depth == 16)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9099 png_set_strip_16 (png_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9100
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9101 /* Expand data to 24 bit RGB, or 8 bit grayscale, with alpha channel
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9102 if available. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9103 png_set_expand (png_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9104
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9105 /* Convert grayscale images to RGB. */
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9106 if (color_type == PNG_COLOR_TYPE_GRAY
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9107 || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9108 png_set_gray_to_rgb (png_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9109
43670
5505d571541b (png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents: 43452
diff changeset
9110 screen_gamma = (f->gamma ? 1 / f->gamma / 0.45455 : 2.2);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9111
48693
057cea5b1f68 *** empty log message ***
Francesco Potortì <pot@gnu.org>
parents: 48692
diff changeset
9112 #if 0 /* Avoid double gamma correction for PNG images. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9113 /* Tell the PNG lib to handle gamma correction for us. */
26293
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
9114 #if defined(PNG_READ_sRGB_SUPPORTED) || defined(PNG_WRITE_sRGB_SUPPORTED)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9115 if (png_get_sRGB (png_ptr, info_ptr, &intent))
43670
5505d571541b (png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents: 43452
diff changeset
9116 /* The libpng documentation says this is right in this case. */
5505d571541b (png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents: 43452
diff changeset
9117 png_set_gamma (png_ptr, screen_gamma, 0.45455);
26293
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
9118 else
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
9119 #endif
65861669b393 (png_load) [PNG_READ_sRGB_SUPPORTED]: Put code using
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
9120 if (png_get_gAMA (png_ptr, info_ptr, &image_gamma))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9121 /* Image contains gamma information. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9122 png_set_gamma (png_ptr, screen_gamma, image_gamma);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9123 else
43670
5505d571541b (png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents: 43452
diff changeset
9124 /* Use the standard default for the image gamma. */
5505d571541b (png_load): Set screen_gamma based on f->gamma.
Richard M. Stallman <rms@gnu.org>
parents: 43452
diff changeset
9125 png_set_gamma (png_ptr, screen_gamma, 0.45455);
48692
b2929bf0de68 (png_load): Avoid double gamma correction for PNG images.
Francesco Potortì <pot@gnu.org>
parents: 48328
diff changeset
9126 #endif /* if 0 */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9127
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9128 /* Handle alpha channel by combining the image with a background
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9129 color. Do this only if a real alpha channel is supplied. For
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9130 simple transparency, we prefer a clipping mask. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9131 if (!transparent_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9132 {
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9133 png_color_16 *image_bg;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9134 Lisp_Object specified_bg
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9135 = image_spec_value (img->spec, QCbackground, NULL);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9136
40279
1adbc1480e83 (png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents: 40264
diff changeset
9137 if (STRINGP (specified_bg))
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9138 /* The user specified `:background', use that. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9139 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9140 XColor color;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9141 if (x_defined_color (f, SDATA (specified_bg), &color, 0))
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9142 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9143 png_color_16 user_bg;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9144
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9145 bzero (&user_bg, sizeof user_bg);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9146 user_bg.red = color.red;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9147 user_bg.green = color.green;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9148 user_bg.blue = color.blue;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9149
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9150 png_set_background (png_ptr, &user_bg,
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9151 PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9152 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9153 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9154 else if (png_get_bKGD (png_ptr, info_ptr, &image_bg))
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9155 /* Image contains a background color with which to
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9156 combine the image. */
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9157 png_set_background (png_ptr, image_bg,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9158 PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9159 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9160 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9161 /* Image does not contain a background color with which
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9162 to combine the image data via an alpha channel. Use
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9163 the frame's background instead. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9164 XColor color;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9165 Colormap cmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9166 png_color_16 frame_background;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9167
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
9168 cmap = FRAME_X_COLORMAP (f);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9169 color.pixel = FRAME_BACKGROUND_PIXEL (f);
32606
78b4e9f31087 (x_to_xcolors, x_set_mouse_color, lookup_pixel_color)
Gerd Moellmann <gerd@gnu.org>
parents: 32549
diff changeset
9170 x_query_color (f, &color);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9171
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9172 bzero (&frame_background, sizeof frame_background);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9173 frame_background.red = color.red;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9174 frame_background.green = color.green;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9175 frame_background.blue = color.blue;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9176
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9177 png_set_background (png_ptr, &frame_background,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9178 PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9179 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9180 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9181
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9182 /* Update info structure. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9183 png_read_update_info (png_ptr, info_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9184
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9185 /* Get number of channels. Valid values are 1 for grayscale images
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9186 and images with a palette, 2 for grayscale images with transparency
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9187 information (alpha channel), 3 for RGB images, and 4 for RGB
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9188 images with alpha channel, i.e. RGBA. If conversions above were
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9189 sufficient we should only have 3 or 4 channels here. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9190 channels = png_get_channels (png_ptr, info_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9191 xassert (channels == 3 || channels == 4);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9192
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9193 /* Number of bytes needed for one row of the image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9194 row_bytes = png_get_rowbytes (png_ptr, info_ptr);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9195
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9196 /* Allocate memory for the image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9197 pixels = (png_byte *) xmalloc (row_bytes * height * sizeof *pixels);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9198 rows = (png_byte **) xmalloc (height * sizeof *rows);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9199 for (i = 0; i < height; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9200 rows[i] = pixels + i * row_bytes;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9201
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9202 /* Read the entire image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9203 png_read_image (png_ptr, rows);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9204 png_read_end (png_ptr, info_ptr);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9205 if (fp)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9206 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9207 fclose (fp);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9208 fp = NULL;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9209 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9210
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9211 /* Create the X image and pixmap. */
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9212 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9213 &img->pixmap))
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
9214 goto error;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9215
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9216 /* Create an image and pixmap serving as mask if the PNG image
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9217 contains an alpha channel. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9218 if (channels == 4
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9219 && !transparent_p
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9220 && !x_create_x_image_and_pixmap (f, width, height, 1,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9221 &mask_img, &img->mask))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9222 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9223 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9224 XFreePixmap (FRAME_X_DISPLAY (f), img->pixmap);
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
9225 img->pixmap = None;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9226 goto error;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9227 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9228
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9229 /* Fill the X image and mask from PNG data. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9230 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9231
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9232 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9233 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9234 png_byte *p = rows[y];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9235
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9236 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9237 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9238 unsigned r, g, b;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9239
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9240 r = *p++ << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9241 g = *p++ << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9242 b = *p++ << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9243 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9244
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9245 /* An alpha channel, aka mask channel, associates variable
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9246 transparency with an image. Where other image formats
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9247 support binary transparency---fully transparent or fully
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9248 opaque---PNG allows up to 254 levels of partial transparency.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9249 The PNG library implements partial transparency by combining
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9250 the image with a specified background color.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9251
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9252 I'm not sure how to handle this here nicely: because the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9253 background on which the image is displayed may change, for
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9254 real alpha channel support, it would be necessary to create
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9255 a new image for each possible background.
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9256
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9257 What I'm doing now is that a mask is created if we have
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9258 boolean transparency information. Otherwise I'm using
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9259 the frame's background color to combine the image with. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9260
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9261 if (channels == 4)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9262 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9263 if (mask_img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9264 XPutPixel (mask_img, x, y, *p > 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9265 ++p;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9266 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9267 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9268 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9269
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9270 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9271 /* Set IMG's background color from the PNG image, unless the user
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9272 overrode it. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9273 {
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9274 png_color_16 *bg;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9275 if (png_get_bKGD (png_ptr, info_ptr, &bg))
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9276 {
40279
1adbc1480e83 (png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents: 40264
diff changeset
9277 img->background = lookup_rgb_color (f, bg->red, bg->green, bg->blue);
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9278 img->background_valid = 1;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9279 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9280 }
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9281
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9282 /* Remember colors allocated for this image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9283 img->colors = colors_in_color_table (&img->ncolors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9284 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9285
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9286 /* Clean up. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9287 png_destroy_read_struct (&png_ptr, &info_ptr, &end_info);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9288 xfree (rows);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9289 xfree (pixels);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9290
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9291 img->width = width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9292 img->height = height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9293
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9294 /* Maybe fill in the background field while we have ximg handy. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9295 IMAGE_BACKGROUND (img, f, ximg);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9296
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9297 /* Put the image into the pixmap, then free the X image and its buffer. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9298 x_put_x_image (f, ximg, img->pixmap, width, height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9299 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9300
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9301 /* Same for the mask. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9302 if (mask_img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9303 {
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9304 /* Fill in the background_transparent field while we have the mask
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9305 handy. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9306 image_background_transparent (img, f, mask_img);
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9307
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9308 x_put_x_image (f, mask_img, img->mask, img->width, img->height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9309 x_destroy_x_image (mask_img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9310 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9311
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9312 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9313 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9314 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9315
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9316 #endif /* HAVE_PNG != 0 */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9317
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9318
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9319
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9320 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9321 JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9322 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9323
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9324 #if HAVE_JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9325
25390
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9326 /* Work around a warning about HAVE_STDLIB_H being redefined in
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9327 jconfig.h. */
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9328 #ifdef HAVE_STDLIB_H
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9329 #define HAVE_STDLIB_H_1
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9330 #undef HAVE_STDLIB_H
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9331 #endif /* HAVE_STLIB_H */
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9332
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9333 #include <jpeglib.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9334 #include <jerror.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9335 #include <setjmp.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9336
25390
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9337 #ifdef HAVE_STLIB_H_1
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9338 #define HAVE_STDLIB_H 1
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9339 #endif
4404ab9c802b [HAVE_JPEG]: Work around a warning about HAVE_STDLIB_H
Gerd Moellmann <gerd@gnu.org>
parents: 25363
diff changeset
9340
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9341 static int jpeg_image_p P_ ((Lisp_Object object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9342 static int jpeg_load P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9343
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9344 /* The symbol `jpeg' identifying images of this type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9345
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9346 Lisp_Object Qjpeg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9347
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9348 /* Indices of image specification fields in gs_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9349
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9350 enum jpeg_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9351 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9352 JPEG_TYPE,
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9353 JPEG_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9354 JPEG_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9355 JPEG_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9356 JPEG_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9357 JPEG_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9358 JPEG_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9359 JPEG_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9360 JPEG_MASK,
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9361 JPEG_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9362 JPEG_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9363 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9364
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9365 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9366 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9367
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9368 static struct image_keyword jpeg_format[JPEG_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9369 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9370 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9371 {":data", IMAGE_STRING_VALUE, 0},
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9372 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9373 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
9374 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9375 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
9376 {":conversions", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9377 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9378 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9379 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9380 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9381
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9382 /* Structure describing the image type `jpeg'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9383
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9384 static struct image_type jpeg_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9385 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9386 &Qjpeg,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9387 jpeg_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9388 jpeg_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9389 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9390 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9391 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9392
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9393
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9394 /* Return non-zero if OBJECT is a valid JPEG image specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9395
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9396 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9397 jpeg_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9398 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9399 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9400 struct image_keyword fmt[JPEG_LAST];
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9401
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9402 bcopy (jpeg_format, fmt, sizeof fmt);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9403
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9404 if (!parse_image_spec (object, fmt, JPEG_LAST, Qjpeg))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9405 return 0;
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9406
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
9407 /* Must specify either the :data or :file keyword. */
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
9408 return fmt[JPEG_FILE].count + fmt[JPEG_DATA].count == 1;
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9409 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9410
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9411
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9412 struct my_jpeg_error_mgr
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9413 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9414 struct jpeg_error_mgr pub;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9415 jmp_buf setjmp_buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9416 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9417
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9418
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9419 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9420 my_error_exit (cinfo)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9421 j_common_ptr cinfo;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9422 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9423 struct my_jpeg_error_mgr *mgr = (struct my_jpeg_error_mgr *) cinfo->err;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9424 longjmp (mgr->setjmp_buffer, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9425 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9426
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9427
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9428 /* Init source method for JPEG data source manager. Called by
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9429 jpeg_read_header() before any data is actually read. See
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9430 libjpeg.doc from the JPEG lib distribution. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9431
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9432 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9433 our_init_source (cinfo)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9434 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9435 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9436 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9437
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9438
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9439 /* Fill input buffer method for JPEG data source manager. Called
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9440 whenever more data is needed. We read the whole image in one step,
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9441 so this only adds a fake end of input marker at the end. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9442
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9443 static boolean
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9444 our_fill_input_buffer (cinfo)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9445 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9446 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9447 /* Insert a fake EOI marker. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9448 struct jpeg_source_mgr *src = cinfo->src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9449 static JOCTET buffer[2];
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9450
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9451 buffer[0] = (JOCTET) 0xFF;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9452 buffer[1] = (JOCTET) JPEG_EOI;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9453
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9454 src->next_input_byte = buffer;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9455 src->bytes_in_buffer = 2;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9456 return TRUE;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9457 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9458
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9459
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9460 /* Method to skip over NUM_BYTES bytes in the image data. CINFO->src
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9461 is the JPEG data source manager. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9462
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9463 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9464 our_skip_input_data (cinfo, num_bytes)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9465 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9466 long num_bytes;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9467 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9468 struct jpeg_source_mgr *src = (struct jpeg_source_mgr *) cinfo->src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9469
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9470 if (src)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9471 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9472 if (num_bytes > src->bytes_in_buffer)
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9473 ERREXIT (cinfo, JERR_INPUT_EOF);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9474
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9475 src->bytes_in_buffer -= num_bytes;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9476 src->next_input_byte += num_bytes;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9477 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9478 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9479
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9480
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9481 /* Method to terminate data source. Called by
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9482 jpeg_finish_decompress() after all data has been processed. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9483
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9484 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9485 our_term_source (cinfo)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9486 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9487 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9488 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9489
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9490
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9491 /* Set up the JPEG lib for reading an image from DATA which contains
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9492 LEN bytes. CINFO is the decompression info structure created for
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9493 reading the image. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9494
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9495 static void
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9496 jpeg_memory_src (cinfo, data, len)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9497 j_decompress_ptr cinfo;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9498 JOCTET *data;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9499 unsigned int len;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9500 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9501 struct jpeg_source_mgr *src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9502
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9503 if (cinfo->src == NULL)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9504 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9505 /* First time for this JPEG object? */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9506 cinfo->src = (struct jpeg_source_mgr *)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9507 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9508 sizeof (struct jpeg_source_mgr));
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9509 src = (struct jpeg_source_mgr *) cinfo->src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9510 src->next_input_byte = data;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9511 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9512
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9513 src = (struct jpeg_source_mgr *) cinfo->src;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9514 src->init_source = our_init_source;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9515 src->fill_input_buffer = our_fill_input_buffer;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9516 src->skip_input_data = our_skip_input_data;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9517 src->resync_to_restart = jpeg_resync_to_restart; /* Use default method. */
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9518 src->term_source = our_term_source;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9519 src->bytes_in_buffer = len;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9520 src->next_input_byte = data;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9521 }
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9522
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9523
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9524 /* Load image IMG for use on frame F. Patterned after example.c
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9525 from the JPEG lib. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9526
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9527 static int
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9528 jpeg_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9529 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9530 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9531 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9532 struct jpeg_decompress_struct cinfo;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9533 struct my_jpeg_error_mgr mgr;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9534 Lisp_Object file, specified_file;
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9535 Lisp_Object specified_data;
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
9536 FILE * volatile fp = NULL;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9537 JSAMPARRAY buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9538 int row_stride, x, y;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9539 XImage *ximg = NULL;
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
9540 int rc;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9541 unsigned long *colors;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9542 int width, height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9543 struct gcpro gcpro1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9544
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9545 /* Open the JPEG file. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9546 specified_file = image_spec_value (img->spec, QCfile, NULL);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9547 specified_data = image_spec_value (img->spec, QCdata, NULL);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9548 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9549 GCPRO1 (file);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9550
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9551 if (NILP (specified_data))
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9552 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9553 file = x_find_image_file (specified_file);
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9554 if (!STRINGP (file))
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9555 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9556 image_error ("Cannot find image file `%s'", specified_file, Qnil);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9557 UNGCPRO;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9558 return 0;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9559 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9560
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9561 fp = fopen (SDATA (file), "r");
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9562 if (fp == NULL)
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9563 {
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9564 image_error ("Cannot open `%s'", file, Qnil);
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9565 UNGCPRO;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9566 return 0;
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9567 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9568 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9569
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9570 /* Customize libjpeg's error handling to call my_error_exit when an
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9571 error is detected. This function will perform a longjmp. */
29728
f0f1e1365670 fix jpeg error-handling setup
Ken Raeburn <raeburn@raeburn.org>
parents: 29617
diff changeset
9572 cinfo.err = jpeg_std_error (&mgr.pub);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9573 mgr.pub.error_exit = my_error_exit;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9574
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9575 if ((rc = setjmp (mgr.setjmp_buffer)) != 0)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9576 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9577 if (rc == 1)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9578 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9579 /* Called from my_error_exit. Display a JPEG error. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9580 char buffer[JMSG_LENGTH_MAX];
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9581 cinfo.err->format_message ((j_common_ptr) &cinfo, buffer);
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9582 image_error ("Error reading JPEG image `%s': %s", img->spec,
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9583 build_string (buffer));
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9584 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9585
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9586 /* Close the input file and destroy the JPEG object. */
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9587 if (fp)
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
9588 fclose ((FILE *) fp);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9589 jpeg_destroy_decompress (&cinfo);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9590
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9591 /* If we already have an XImage, free that. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9592 x_destroy_x_image (ximg);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9593
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9594 /* Free pixmap and colors. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9595 x_clear_image (f, img);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9596
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9597 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9598 return 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9599 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9600
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9601 /* Create the JPEG decompression object. Let it read from fp.
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9602 Read the JPEG image header. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9603 jpeg_create_decompress (&cinfo);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9604
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9605 if (NILP (specified_data))
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
9606 jpeg_stdio_src (&cinfo, (FILE *) fp);
27053
3995eec4287f (enum jpeg_keyword_index): Add JPEG_DATA.
Gerd Moellmann <gerd@gnu.org>
parents: 26980
diff changeset
9607 else
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9608 jpeg_memory_src (&cinfo, SDATA (specified_data),
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9609 SBYTES (specified_data));
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9610
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9611 jpeg_read_header (&cinfo, TRUE);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9612
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9613 /* Customize decompression so that color quantization will be used.
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9614 Start decompression. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9615 cinfo.quantize_colors = TRUE;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9616 jpeg_start_decompress (&cinfo);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9617 width = img->width = cinfo.output_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9618 height = img->height = cinfo.output_height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9619
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9620 /* Create X image and pixmap. */
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9621 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap))
31686
577372d71de8 (lookup_image): Block input while loading the image so
Gerd Moellmann <gerd@gnu.org>
parents: 31651
diff changeset
9622 longjmp (mgr.setjmp_buffer, 2);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9623
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9624 /* Allocate colors. When color quantization is used,
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9625 cinfo.actual_number_of_colors has been set with the number of
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9626 colors generated, and cinfo.colormap is a two-dimensional array
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9627 of color indices in the range 0..cinfo.actual_number_of_colors.
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9628 No more than 255 colors will be generated. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9629 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9630 int i, ir, ig, ib;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9631
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9632 if (cinfo.out_color_components > 2)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9633 ir = 0, ig = 1, ib = 2;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9634 else if (cinfo.out_color_components > 1)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9635 ir = 0, ig = 1, ib = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9636 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9637 ir = 0, ig = 0, ib = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9638
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9639 /* Use the color table mechanism because it handles colors that
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9640 cannot be allocated nicely. Such colors will be replaced with
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9641 a default color, and we don't have to care about which colors
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9642 can be freed safely, and which can't. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9643 init_color_table ();
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9644 colors = (unsigned long *) alloca (cinfo.actual_number_of_colors
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9645 * sizeof *colors);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9646
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9647 for (i = 0; i < cinfo.actual_number_of_colors; ++i)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9648 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9649 /* Multiply RGB values with 255 because X expects RGB values
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9650 in the range 0..0xffff. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9651 int r = cinfo.colormap[ir][i] << 8;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9652 int g = cinfo.colormap[ig][i] << 8;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9653 int b = cinfo.colormap[ib][i] << 8;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9654 colors[i] = lookup_rgb_color (f, r, g, b);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9655 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9656
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9657 /* Remember those colors actually allocated. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9658 img->colors = colors_in_color_table (&img->ncolors);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9659 free_color_table ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9660 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9661
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9662 /* Read pixels. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9663 row_stride = width * cinfo.output_components;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9664 buffer = cinfo.mem->alloc_sarray ((j_common_ptr) &cinfo, JPOOL_IMAGE,
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9665 row_stride, 1);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9666 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9667 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9668 jpeg_read_scanlines (&cinfo, buffer, 1);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9669 for (x = 0; x < cinfo.output_width; ++x)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9670 XPutPixel (ximg, x, y, colors[buffer[0][x]]);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9671 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9672
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9673 /* Clean up. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9674 jpeg_finish_decompress (&cinfo);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9675 jpeg_destroy_decompress (&cinfo);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9676 if (fp)
31543
9c5e42fa3ba5 (png_load, jpeg_load): Declare some variables volatile
Gerd Moellmann <gerd@gnu.org>
parents: 30601
diff changeset
9677 fclose ((FILE *) fp);
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9678
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9679 /* Maybe fill in the background field while we have ximg handy. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9680 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9681 IMAGE_BACKGROUND (img, f, ximg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9682
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9683 /* Put the image into the pixmap. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9684 x_put_x_image (f, ximg, img->pixmap, width, height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9685 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9686 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9687 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9688 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9689
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9690 #endif /* HAVE_JPEG */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9691
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9692
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9693
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9694 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9695 TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9696 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9697
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9698 #if HAVE_TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9699
25335
2de1796b006b remove tiff34 prefix from include.
Gerd Moellmann <gerd@gnu.org>
parents: 25320
diff changeset
9700 #include <tiffio.h>
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9701
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9702 static int tiff_image_p P_ ((Lisp_Object object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9703 static int tiff_load P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9704
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9705 /* The symbol `tiff' identifying images of this type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9706
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9707 Lisp_Object Qtiff;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9708
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9709 /* Indices of image specification fields in tiff_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9710
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9711 enum tiff_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9712 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9713 TIFF_TYPE,
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9714 TIFF_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9715 TIFF_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9716 TIFF_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9717 TIFF_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9718 TIFF_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9719 TIFF_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9720 TIFF_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9721 TIFF_MASK,
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9722 TIFF_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9723 TIFF_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9724 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9725
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9726 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9727 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9728
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9729 static struct image_keyword tiff_format[TIFF_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9730 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9731 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9732 {":data", IMAGE_STRING_VALUE, 0},
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9733 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9734 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
9735 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9736 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
9737 {":conversions", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
9738 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9739 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
9740 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9741 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9742
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9743 /* Structure describing the image type `tiff'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9744
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9745 static struct image_type tiff_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9746 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9747 &Qtiff,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9748 tiff_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9749 tiff_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9750 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9751 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9752 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9753
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9754
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9755 /* Return non-zero if OBJECT is a valid TIFF image specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9756
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9757 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9758 tiff_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9759 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9760 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9761 struct image_keyword fmt[TIFF_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9762 bcopy (tiff_format, fmt, sizeof fmt);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9763
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
9764 if (!parse_image_spec (object, fmt, TIFF_LAST, Qtiff))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9765 return 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9766
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
9767 /* Must specify either the :data or :file keyword. */
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
9768 return fmt[TIFF_FILE].count + fmt[TIFF_DATA].count == 1;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9769 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9770
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9771
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9772 /* Reading from a memory buffer for TIFF images Based on the PNG
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9773 memory source, but we have to provide a lot of extra functions.
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9774 Blah.
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9775
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9776 We really only need to implement read and seek, but I am not
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9777 convinced that the TIFF library is smart enough not to destroy
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9778 itself if we only hand it the function pointers we need to
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9779 override. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9780
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9781 typedef struct
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9782 {
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9783 unsigned char *bytes;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9784 size_t len;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9785 int index;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9786 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9787 tiff_memory_source;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9788
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9789
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9790 static size_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9791 tiff_read_from_memory (data, buf, size)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9792 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9793 tdata_t buf;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9794 tsize_t size;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9795 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9796 tiff_memory_source *src = (tiff_memory_source *) data;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9797
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9798 if (size > src->len - src->index)
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9799 return (size_t) -1;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9800 bcopy (src->bytes + src->index, buf, size);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9801 src->index += size;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9802 return size;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9803 }
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9804
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9805
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9806 static size_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9807 tiff_write_from_memory (data, buf, size)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9808 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9809 tdata_t buf;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9810 tsize_t size;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9811 {
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9812 return (size_t) -1;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9813 }
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9814
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9815
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9816 static toff_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9817 tiff_seek_in_memory (data, off, whence)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9818 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9819 toff_t off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9820 int whence;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9821 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9822 tiff_memory_source *src = (tiff_memory_source *) data;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9823 int idx;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9824
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9825 switch (whence)
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9826 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9827 case SEEK_SET: /* Go from beginning of source. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9828 idx = off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9829 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9830
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9831 case SEEK_END: /* Go from end of source. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9832 idx = src->len + off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9833 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9834
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9835 case SEEK_CUR: /* Go from current position. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9836 idx = src->index + off;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9837 break;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9838
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9839 default: /* Invalid `whence'. */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9840 return -1;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9841 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9842
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9843 if (idx > src->len || idx < 0)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9844 return -1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9845
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9846 src->index = idx;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9847 return src->index;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9848 }
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9849
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9850
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9851 static int
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9852 tiff_close_memory (data)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9853 thandle_t data;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9854 {
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9855 /* NOOP */
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9856 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9857 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9858
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9859
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9860 static int
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9861 tiff_mmap_memory (data, pbase, psize)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9862 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9863 tdata_t *pbase;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9864 toff_t *psize;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9865 {
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9866 /* It is already _IN_ memory. */
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9867 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9868 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9869
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9870
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9871 static void
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9872 tiff_unmap_memory (data, base, size)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9873 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9874 tdata_t base;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9875 toff_t size;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9876 {
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9877 /* We don't need to do this. */
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9878 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9879
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9880
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9881 static toff_t
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9882 tiff_size_of_memory (data)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9883 thandle_t data;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9884 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9885 return ((tiff_memory_source *) data)->len;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9886 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9887
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
9888
39591
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9889 static void
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9890 tiff_error_handler (title, format, ap)
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9891 const char *title, *format;
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9892 va_list ap;
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9893 {
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9894 char buf[512];
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9895 int len;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9896
39591
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9897 len = sprintf (buf, "TIFF error: %s ", title);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9898 vsprintf (buf + len, format, ap);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9899 add_to_log (buf, Qnil, Qnil);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9900 }
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9901
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9902
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9903 static void
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9904 tiff_warning_handler (title, format, ap)
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9905 const char *title, *format;
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9906 va_list ap;
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9907 {
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9908 char buf[512];
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9909 int len;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9910
39591
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9911 len = sprintf (buf, "TIFF warning: %s ", title);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9912 vsprintf (buf + len, format, ap);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9913 add_to_log (buf, Qnil, Qnil);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9914 }
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9915
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9916
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9917 /* Load TIFF image IMG for use on frame F. Value is non-zero if
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9918 successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9919
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9920 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9921 tiff_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9922 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9923 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9924 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9925 Lisp_Object file, specified_file;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9926 Lisp_Object specified_data;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9927 TIFF *tiff;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9928 int width, height, x, y;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9929 uint32 *buf;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9930 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9931 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9932 struct gcpro gcpro1;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9933 tiff_memory_source memsrc;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9934
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9935 specified_file = image_spec_value (img->spec, QCfile, NULL);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9936 specified_data = image_spec_value (img->spec, QCdata, NULL);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9937 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9938 GCPRO1 (file);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9939
39591
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9940 TIFFSetErrorHandler (tiff_error_handler);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9941 TIFFSetWarningHandler (tiff_warning_handler);
84263f0294b3 (tiff_error_handler, tiff_warning_handler): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 39442
diff changeset
9942
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9943 if (NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9944 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9945 /* Read from a file */
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9946 file = x_find_image_file (specified_file);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9947 if (!STRINGP (file))
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9948 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9949 image_error ("Cannot find image file `%s'", file, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9950 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9951 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9952 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9953
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9954 /* Try to open the image file. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9955 tiff = TIFFOpen (SDATA (file), "r");
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9956 if (tiff == NULL)
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9957 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9958 image_error ("Cannot open `%s'", file, Qnil);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9959 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9960 return 0;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
9961 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9962 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9963 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9964 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9965 /* Memory source! */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9966 memsrc.bytes = SDATA (specified_data);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
9967 memsrc.len = SBYTES (specified_data);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9968 memsrc.index = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9969
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9970 tiff = TIFFClientOpen ("memory_source", "r", &memsrc,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9971 (TIFFReadWriteProc) tiff_read_from_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9972 (TIFFReadWriteProc) tiff_write_from_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9973 tiff_seek_in_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9974 tiff_close_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9975 tiff_size_of_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9976 tiff_mmap_memory,
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9977 tiff_unmap_memory);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9978
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9979 if (!tiff)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9980 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9981 image_error ("Cannot open memory source for `%s'", img->spec, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9982 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9983 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9984 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
9985 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9986
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9987 /* Get width and height of the image, and allocate a raster buffer
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9988 of width x height 32-bit values. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9989 TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9990 TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9991 buf = (uint32 *) xmalloc (width * height * sizeof *buf);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9992
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9993 rc = TIFFReadRGBAImage (tiff, width, height, buf, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9994 TIFFClose (tiff);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9995 if (!rc)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9996 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
9997 image_error ("Error reading TIFF image `%s'", img->spec, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9998 xfree (buf);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
9999 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10000 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10001 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10002
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10003 /* Create the X image and pixmap. */
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10004 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10005 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10006 xfree (buf);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10007 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10008 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10009 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10010
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10011 /* Initialize the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10012 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10013
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10014 /* Process the pixel raster. Origin is in the lower-left corner. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10015 for (y = 0; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10016 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10017 uint32 *row = buf + y * width;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10018
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10019 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10020 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10021 uint32 abgr = row[x];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10022 int r = TIFFGetR (abgr) << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10023 int g = TIFFGetG (abgr) << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10024 int b = TIFFGetB (abgr) << 8;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10025 XPutPixel (ximg, x, height - 1 - y, lookup_rgb_color (f, r, g, b));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10026 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10027 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10028
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10029 /* Remember the colors allocated for the image. Free the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10030 img->colors = colors_in_color_table (&img->ncolors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10031 free_color_table ();
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10032
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10033 img->width = width;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10034 img->height = height;
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10035
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10036 /* Maybe fill in the background field while we have ximg handy. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10037 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10038 IMAGE_BACKGROUND (img, f, ximg);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10039
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10040 /* Put the image into the pixmap, then free the X image and its buffer. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10041 x_put_x_image (f, ximg, img->pixmap, width, height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10042 x_destroy_x_image (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10043 xfree (buf);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10044
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10045 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10046 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10047 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10048
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10049 #endif /* HAVE_TIFF != 0 */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10050
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10051
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10052
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10053 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10054 GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10055 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10056
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10057 #if HAVE_GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10058
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10059 #include <gif_lib.h>
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10060
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10061 static int gif_image_p P_ ((Lisp_Object object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10062 static int gif_load P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10063
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10064 /* The symbol `gif' identifying images of this type. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10065
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10066 Lisp_Object Qgif;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10067
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10068 /* Indices of image specification fields in gif_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10069
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10070 enum gif_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10071 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10072 GIF_TYPE,
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10073 GIF_DATA,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10074 GIF_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10075 GIF_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10076 GIF_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10077 GIF_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10078 GIF_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10079 GIF_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
10080 GIF_MASK,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10081 GIF_IMAGE,
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10082 GIF_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10083 GIF_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10084 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10085
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10086 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10087 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10088
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10089 static struct image_keyword gif_format[GIF_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10090 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10091 {":type", IMAGE_SYMBOL_VALUE, 1},
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10092 {":data", IMAGE_STRING_VALUE, 0},
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10093 {":file", IMAGE_STRING_VALUE, 0},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
10094 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
10095 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10096 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
10097 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10098 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
10099 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
40279
1adbc1480e83 (png_load): Make sure SPECIFIED_BG is a string.
Miles Bader <miles@gnu.org>
parents: 40264
diff changeset
10100 {":image", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10101 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10102 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10103
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10104 /* Structure describing the image type `gif'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10105
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10106 static struct image_type gif_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10107 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10108 &Qgif,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10109 gif_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10110 gif_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10111 x_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10112 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10113 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10114
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
10115
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10116 /* Return non-zero if OBJECT is a valid GIF image specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10117
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10118 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10119 gif_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10120 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10121 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10122 struct image_keyword fmt[GIF_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10123 bcopy (gif_format, fmt, sizeof fmt);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10124
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
10125 if (!parse_image_spec (object, fmt, GIF_LAST, Qgif))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10126 return 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10127
27069
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
10128 /* Must specify either the :data or :file keyword. */
b2934c683b5e (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27066
diff changeset
10129 return fmt[GIF_FILE].count + fmt[GIF_DATA].count == 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10130 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10131
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
10132
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10133 /* Reading a GIF image from memory
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10134 Based on the PNG memory stuff to a certain extent. */
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10135
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10136 typedef struct
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10137 {
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10138 unsigned char *bytes;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10139 size_t len;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10140 int index;
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10141 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10142 gif_memory_source;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10143
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
10144
27153
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
10145 /* Make the current memory source available to gif_read_from_memory.
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
10146 It's done this way because not all versions of libungif support
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
10147 a UserData field in the GifFileType structure. */
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
10148 static gif_memory_source *current_gif_memory_src;
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
10149
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10150 static int
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10151 gif_read_from_memory (file, buf, len)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10152 GifFileType *file;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10153 GifByteType *buf;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10154 int len;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10155 {
27153
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
10156 gif_memory_source *src = current_gif_memory_src;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10157
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10158 if (len > src->len - src->index)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10159 return -1;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10160
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10161 bcopy (src->bytes + src->index, buf, len);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10162 src->index += len;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10163 return len;
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10164 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10165
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10166
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10167 /* Load GIF image IMG for use on frame F. Value is non-zero if
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10168 successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10169
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10170 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10171 gif_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10172 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10173 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10174 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10175 Lisp_Object file, specified_file;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10176 Lisp_Object specified_data;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10177 int rc, width, height, x, y, i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10178 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10179 ColorMapObject *gif_color_map;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10180 unsigned long pixel_colors[256];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10181 GifFileType *gif;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10182 struct gcpro gcpro1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10183 Lisp_Object image;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10184 int ino, image_left, image_top, image_width, image_height;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10185 gif_memory_source memsrc;
27066
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
10186 unsigned char *raster;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10187
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10188 specified_file = image_spec_value (img->spec, QCfile, NULL);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10189 specified_data = image_spec_value (img->spec, QCdata, NULL);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10190 file = Qnil;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10191 GCPRO1 (file);
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10192
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10193 if (NILP (specified_data))
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10194 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10195 file = x_find_image_file (specified_file);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10196 if (!STRINGP (file))
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10197 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10198 image_error ("Cannot find image file `%s'", specified_file, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10199 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10200 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10201 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10202
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10203 /* Open the GIF file. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
10204 gif = DGifOpenFileName (SDATA (file));
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10205 if (gif == NULL)
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10206 {
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10207 image_error ("Cannot open `%s'", file, Qnil);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10208 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10209 return 0;
27058
209b24ba8ddf Changes to xfns.c to support reading images from a memory buffer instead of forcing them to be on disk. GIF/JPEG/PNG/TIFF currently support this.
William M. Perry <wmperry@aventail.com>
parents: 27053
diff changeset
10210 }
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10211 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10212 else
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10213 {
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10214 /* Read from memory! */
27153
31b7a2a8ea20 (current_gif_memory_src): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 27071
diff changeset
10215 current_gif_memory_src = &memsrc;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
10216 memsrc.bytes = SDATA (specified_data);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
10217 memsrc.len = SBYTES (specified_data);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10218 memsrc.index = 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10219
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10220 gif = DGifOpen(&memsrc, gif_read_from_memory);
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10221 if (!gif)
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10222 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10223 image_error ("Cannot open memory source `%s'", img->spec, Qnil);
27060
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10224 UNGCPRO;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10225 return 0;
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10226 }
4960164efd1c New image functions adapted to Emacs conventions.
Gerd Moellmann <gerd@gnu.org>
parents: 27058
diff changeset
10227 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10228
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10229 /* Read entire contents. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10230 rc = DGifSlurp (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10231 if (rc == GIF_ERROR)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10232 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10233 image_error ("Error reading `%s'", img->spec, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10234 DGifCloseFile (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10235 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10236 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10237 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10238
25620
1c991744ce13 (QCindex): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25593
diff changeset
10239 image = image_spec_value (img->spec, QCindex, NULL);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10240 ino = INTEGERP (image) ? XFASTINT (image) : 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10241 if (ino >= gif->ImageCount)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10242 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10243 image_error ("Invalid image number `%s' in image `%s'",
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10244 image, img->spec);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10245 DGifCloseFile (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10246 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10247 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10248 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10249
43426
f260f08997bc (gif_load): Use correct width and height for GIF images.
Pavel Janík <Pavel@Janik.cz>
parents: 42894
diff changeset
10250 width = img->width = max (gif->SWidth, gif->Image.Left + gif->Image.Width);
f260f08997bc (gif_load): Use correct width and height for GIF images.
Pavel Janík <Pavel@Janik.cz>
parents: 42894
diff changeset
10251 height = img->height = max (gif->SHeight, gif->Image.Top + gif->Image.Height);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10252
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10253 /* Create the X image and pixmap. */
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10254 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10255 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10256 DGifCloseFile (gif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10257 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10258 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10259 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10260
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10261 /* Allocate colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10262 gif_color_map = gif->SavedImages[ino].ImageDesc.ColorMap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10263 if (!gif_color_map)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10264 gif_color_map = gif->SColorMap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10265 init_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10266 bzero (pixel_colors, sizeof pixel_colors);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10267
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10268 for (i = 0; i < gif_color_map->ColorCount; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10269 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10270 int r = gif_color_map->Colors[i].Red << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10271 int g = gif_color_map->Colors[i].Green << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10272 int b = gif_color_map->Colors[i].Blue << 8;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10273 pixel_colors[i] = lookup_rgb_color (f, r, g, b);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10274 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10275
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10276 img->colors = colors_in_color_table (&img->ncolors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10277 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10278
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10279 /* Clear the part of the screen image that are not covered by
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10280 the image from the GIF file. Full animated GIF support
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10281 requires more than can be done here (see the gif89 spec,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10282 disposal methods). Let's simply assume that the part
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10283 not covered by a sub-image is in the frame's background color. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10284 image_top = gif->SavedImages[ino].ImageDesc.Top;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10285 image_left = gif->SavedImages[ino].ImageDesc.Left;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10286 image_width = gif->SavedImages[ino].ImageDesc.Width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10287 image_height = gif->SavedImages[ino].ImageDesc.Height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10288
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10289 for (y = 0; y < image_top; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10290 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10291 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10292
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10293 for (y = image_top + image_height; y < height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10294 for (x = 0; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10295 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10296
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10297 for (y = image_top; y < image_top + image_height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10298 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10299 for (x = 0; x < image_left; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10300 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10301 for (x = image_left + image_width; x < width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10302 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10303 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10304
27066
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
10305 /* Read the GIF image into the X image. We use a local variable
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
10306 `raster' here because RasterBits below is a char *, and invites
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
10307 problems with bytes >= 0x80. */
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
10308 raster = (unsigned char *) gif->SavedImages[ino].RasterBits;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10309
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10310 if (gif->SavedImages[ino].ImageDesc.Interlace)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10311 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10312 static int interlace_start[] = {0, 4, 2, 1};
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10313 static int interlace_increment[] = {8, 8, 4, 2};
34976
05c36b1fa618 (x_display_info_for_name): Cast 0 to "char *" in the call
Eli Zaretskii <eliz@gnu.org>
parents: 34911
diff changeset
10314 int pass;
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10315 int row = interlace_start[0];
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10316
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10317 pass = 0;
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10318
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10319 for (y = 0; y < image_height; y++)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10320 {
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10321 if (row >= image_height)
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10322 {
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10323 row = interlace_start[++pass];
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10324 while (row >= image_height)
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10325 row = interlace_start[++pass];
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10326 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10327
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10328 for (x = 0; x < image_width; x++)
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10329 {
27066
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
10330 int i = raster[(y * image_width) + x];
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10331 XPutPixel (ximg, x + image_left, row + image_top,
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10332 pixel_colors[i]);
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10333 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10334
26032
6a349a18b1ad (gif_load): Fix handling of interlaced GIFs.
Gerd Moellmann <gerd@gnu.org>
parents: 25955
diff changeset
10335 row += interlace_increment[pass];
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10336 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10337 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10338 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10339 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10340 for (y = 0; y < image_height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10341 for (x = 0; x < image_width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10342 {
27066
30697e7cb5a2 (gif_load): Avoid sign extension and thus out of bounds
Gerd Moellmann <gerd@gnu.org>
parents: 27060
diff changeset
10343 int i = raster[y * image_width + x];
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10344 XPutPixel (ximg, x + image_left, y + image_top, pixel_colors[i]);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10345 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10346 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10347
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10348 DGifCloseFile (gif);
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10349
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10350 /* Maybe fill in the background field while we have ximg handy. */
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10351 if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10352 IMAGE_BACKGROUND (img, f, ximg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10353
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10354 /* Put the image into the pixmap, then free the X image and its buffer. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10355 x_put_x_image (f, ximg, img->pixmap, width, height);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10356 x_destroy_x_image (ximg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10357
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10358 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10359 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10360 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10361
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10362 #endif /* HAVE_GIF != 0 */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10363
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10364
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10365
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10366 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10367 Ghostscript
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10368 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10369
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10370 static int gs_image_p P_ ((Lisp_Object object));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10371 static int gs_load P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10372 static void gs_clear_image P_ ((struct frame *f, struct image *img));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10373
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
10374 /* The symbol `postscript' identifying images of this type. */
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
10375
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
10376 Lisp_Object Qpostscript;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10377
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10378 /* Keyword symbols. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10379
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10380 Lisp_Object QCloader, QCbounding_box, QCpt_width, QCpt_height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10381
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10382 /* Indices of image specification fields in gs_format, below. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10383
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10384 enum gs_keyword_index
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10385 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10386 GS_TYPE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10387 GS_PT_WIDTH,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10388 GS_PT_HEIGHT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10389 GS_FILE,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10390 GS_LOADER,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10391 GS_BOUNDING_BOX,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10392 GS_ASCENT,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10393 GS_MARGIN,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10394 GS_RELIEF,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10395 GS_ALGORITHM,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10396 GS_HEURISTIC_MASK,
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
10397 GS_MASK,
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10398 GS_BACKGROUND,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10399 GS_LAST
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10400 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10401
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10402 /* Vector of image_keyword structures describing the format
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10403 of valid user-defined image specifications. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10404
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10405 static struct image_keyword gs_format[GS_LAST] =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10406 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10407 {":type", IMAGE_SYMBOL_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10408 {":pt-width", IMAGE_POSITIVE_INTEGER_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10409 {":pt-height", IMAGE_POSITIVE_INTEGER_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10410 {":file", IMAGE_STRING_VALUE, 1},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10411 {":loader", IMAGE_FUNCTION_VALUE, 0},
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10412 {":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1},
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
10413 {":ascent", IMAGE_ASCENT_VALUE, 0},
35275
38e58f530a1a (Fimage_size, image_ascent): Adapt to the change of image
Gerd Moellmann <gerd@gnu.org>
parents: 35261
diff changeset
10414 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10415 {":relief", IMAGE_INTEGER_VALUE, 0},
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
10416 {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
10417 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
40264
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10418 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
04766dd416bb (image_background, image_background_transparent)
Miles Bader <miles@gnu.org>
parents: 40204
diff changeset
10419 {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10420 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10421
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10422 /* Structure describing the image type `ghostscript'. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10423
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10424 static struct image_type gs_type =
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10425 {
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
10426 &Qpostscript,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10427 gs_image_p,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10428 gs_load,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10429 gs_clear_image,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10430 NULL
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10431 };
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10432
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10433
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10434 /* Free X resources of Ghostscript image IMG which is used on frame F. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10435
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10436 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10437 gs_clear_image (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10438 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10439 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10440 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10441 /* IMG->data.ptr_val may contain a recorded colormap. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10442 xfree (img->data.ptr_val);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10443 x_clear_image (f, img);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10444 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10445
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10446
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10447 /* Return non-zero if OBJECT is a valid Ghostscript image
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10448 specification. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10449
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10450 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10451 gs_image_p (object)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10452 Lisp_Object object;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10453 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10454 struct image_keyword fmt[GS_LAST];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10455 Lisp_Object tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10456 int i;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10457
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10458 bcopy (gs_format, fmt, sizeof fmt);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10459
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
10460 if (!parse_image_spec (object, fmt, GS_LAST, Qpostscript))
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10461 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10462
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10463 /* Bounding box must be a list or vector containing 4 integers. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10464 tem = fmt[GS_BOUNDING_BOX].value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10465 if (CONSP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10466 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10467 for (i = 0; i < 4; ++i, tem = XCDR (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10468 if (!CONSP (tem) || !INTEGERP (XCAR (tem)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10469 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10470 if (!NILP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10471 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10472 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10473 else if (VECTORP (tem))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10474 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10475 if (XVECTOR (tem)->size != 4)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10476 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10477 for (i = 0; i < 4; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10478 if (!INTEGERP (XVECTOR (tem)->contents[i]))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10479 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10480 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10481 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10482 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10483
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10484 return 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10485 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10486
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10487
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10488 /* Load Ghostscript image IMG for use on frame F. Value is non-zero
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10489 if successful. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10490
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10491 static int
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10492 gs_load (f, img)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10493 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10494 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10495 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10496 char buffer[100];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10497 Lisp_Object window_and_pixmap_id = Qnil, loader, pt_height, pt_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10498 struct gcpro gcpro1, gcpro2;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10499 Lisp_Object frame;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10500 double in_width, in_height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10501 Lisp_Object pixel_colors = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10502
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10503 /* Compute pixel size of pixmap needed from the given size in the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10504 image specification. Sizes in the specification are in pt. 1 pt
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10505 = 1/72 in, xdpi and ydpi are stored in the frame's X display
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10506 info. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10507 pt_width = image_spec_value (img->spec, QCpt_width, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10508 in_width = XFASTINT (pt_width) / 72.0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10509 img->width = in_width * FRAME_X_DISPLAY_INFO (f)->resx;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10510 pt_height = image_spec_value (img->spec, QCpt_height, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10511 in_height = XFASTINT (pt_height) / 72.0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10512 img->height = in_height * FRAME_X_DISPLAY_INFO (f)->resy;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10513
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10514 /* Create the pixmap. */
31693
8e9fb2a048ac (x_clear_image_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 31688
diff changeset
10515 xassert (img->pixmap == None);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10516 img->pixmap = XCreatePixmap (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10517 img->width, img->height,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10518 DefaultDepthOfScreen (FRAME_X_SCREEN (f)));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10519
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10520 if (!img->pixmap)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10521 {
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10522 image_error ("Unable to create pixmap for `%s'", img->spec, Qnil);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10523 return 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10524 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10525
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10526 /* Call the loader to fill the pixmap. It returns a process object
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10527 if successful. We do not record_unwind_protect here because
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10528 other places in redisplay like calling window scroll functions
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10529 don't either. Let the Lisp loader use `unwind-protect' instead. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10530 GCPRO2 (window_and_pixmap_id, pixel_colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10531
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10532 sprintf (buffer, "%lu %lu",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10533 (unsigned long) FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10534 (unsigned long) img->pixmap);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10535 window_and_pixmap_id = build_string (buffer);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10536
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10537 sprintf (buffer, "%lu %lu",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10538 FRAME_FOREGROUND_PIXEL (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10539 FRAME_BACKGROUND_PIXEL (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10540 pixel_colors = build_string (buffer);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10541
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10542 XSETFRAME (frame, f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10543 loader = image_spec_value (img->spec, QCloader, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10544 if (NILP (loader))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10545 loader = intern ("gs-load-image");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10546
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10547 img->data.lisp_val = call6 (loader, frame, img->spec,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10548 make_number (img->width),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10549 make_number (img->height),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10550 window_and_pixmap_id,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10551 pixel_colors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10552 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10553 return PROCESSP (img->data.lisp_val);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10554 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10555
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10556
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10557 /* Kill the Ghostscript process that was started to fill PIXMAP on
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10558 frame F. Called from XTread_socket when receiving an event
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10559 telling Emacs that Ghostscript has finished drawing. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10560
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10561 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10562 x_kill_gs_process (pixmap, f)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10563 Pixmap pixmap;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10564 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10565 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10566 struct image_cache *c = FRAME_X_IMAGE_CACHE (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10567 int class, i;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10568 struct image *img;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10569
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10570 /* Find the image containing PIXMAP. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10571 for (i = 0; i < c->used; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10572 if (c->images[i]->pixmap == pixmap)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10573 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10574
39442
0e0c30478fe3 (x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents: 39277
diff changeset
10575 /* Should someone in between have cleared the image cache, for
0e0c30478fe3 (x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents: 39277
diff changeset
10576 instance, give up. */
0e0c30478fe3 (x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents: 39277
diff changeset
10577 if (i == c->used)
0e0c30478fe3 (x_kill_gs_process): Recognize if someone has cleared
Gerd Moellmann <gerd@gnu.org>
parents: 39277
diff changeset
10578 return;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10579
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10580 /* Kill the GS process. We should have found PIXMAP in the image
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10581 cache and its image should contain a process object. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10582 img = c->images[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10583 xassert (PROCESSP (img->data.lisp_val));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10584 Fkill_process (img->data.lisp_val, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10585 img->data.lisp_val = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10586
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10587 /* On displays with a mutable colormap, figure out the colors
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10588 allocated for the image by looking at the pixels of an XImage for
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10589 img->pixmap. */
28144
71ebba3566ec (X_I18N_INHIBITED): Don't define.
Gerd Moellmann <gerd@gnu.org>
parents: 28096
diff changeset
10590 class = FRAME_X_VISUAL (f)->class;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10591 if (class != StaticColor && class != StaticGray && class != TrueColor)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10592 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10593 XImage *ximg;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10594
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10595 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10596
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10597 /* Try to get an XImage for img->pixmep. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10598 ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10599 0, 0, img->width, img->height, ~0, ZPixmap);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10600 if (ximg)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10601 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10602 int x, y;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10603
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10604 /* Initialize the color table. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10605 init_color_table ();
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10606
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10607 /* For each pixel of the image, look its color up in the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10608 color table. After having done so, the color table will
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10609 contain an entry for each color used by the image. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10610 for (y = 0; y < img->height; ++y)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10611 for (x = 0; x < img->width; ++x)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10612 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10613 unsigned long pixel = XGetPixel (ximg, x, y);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10614 lookup_pixel_color (f, pixel);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10615 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10616
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10617 /* Record colors in the image. Free color table and XImage. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10618 img->colors = colors_in_color_table (&img->ncolors);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10619 free_color_table ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10620 XDestroyImage (ximg);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10621
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10622 #if 0 /* This doesn't seem to be the case. If we free the colors
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10623 here, we get a BadAccess later in x_clear_image when
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10624 freeing the colors. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10625 /* We have allocated colors once, but Ghostscript has also
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10626 allocated colors on behalf of us. So, to get the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10627 reference counts right, free them once. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10628 if (img->ncolors)
27963
0e2c6e5cca6e (x_clear_image, x_kill_gs_process): Use x_free_colors.
Gerd Moellmann <gerd@gnu.org>
parents: 27915
diff changeset
10629 x_free_colors (f, img->colors, img->ncolors);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10630 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10631 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10632 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10633 image_error ("Cannot get X image of `%s'; colors will not be freed",
27071
d647366b1464 (x_create_x_image_and_pixmap): Remove parameter file.
Gerd Moellmann <gerd@gnu.org>
parents: 27069
diff changeset
10634 img->spec, Qnil);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10635
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10636 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10637 }
37173
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
10638
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
10639 /* Now that we have the pixmap, compute mask and transform the
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
10640 image if requested. */
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
10641 BLOCK_INPUT;
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
10642 postprocess_image (f, img);
2a637d514525 (postprocess_image): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36869
diff changeset
10643 UNBLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10644 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10645
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10646
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10647
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10648 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10649 Window properties
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10650 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10651
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10652 DEFUN ("x-change-window-property", Fx_change_window_property,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10653 Sx_change_window_property, 2, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10654 doc: /* Change window property PROP to VALUE on the X window of FRAME.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
10655 PROP and VALUE must be strings. FRAME nil or omitted means use the
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10656 selected frame. Value is VALUE. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10657 (prop, value, frame)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10658 Lisp_Object frame, prop, value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10659 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10660 struct frame *f = check_x_frame (frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10661 Atom prop_atom;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10662
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
10663 CHECK_STRING (prop);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
10664 CHECK_STRING (value);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10665
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10666 BLOCK_INPUT;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
10667 prop_atom = XInternAtom (FRAME_X_DISPLAY (f), SDATA (prop), False);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10668 XChangeProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10669 prop_atom, XA_STRING, 8, PropModeReplace,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
10670 SDATA (value), SCHARS (value));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10671
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10672 /* Make sure the property is set when we return. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10673 XFlush (FRAME_X_DISPLAY (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10674 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10675
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10676 return value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10677 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10678
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10679
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10680 DEFUN ("x-delete-window-property", Fx_delete_window_property,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10681 Sx_delete_window_property, 1, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10682 doc: /* Remove window property PROP from X window of FRAME.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10683 FRAME nil or omitted means use the selected frame. Value is PROP. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10684 (prop, frame)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10685 Lisp_Object prop, frame;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10686 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10687 struct frame *f = check_x_frame (frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10688 Atom prop_atom;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10689
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
10690 CHECK_STRING (prop);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10691 BLOCK_INPUT;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
10692 prop_atom = XInternAtom (FRAME_X_DISPLAY (f), SDATA (prop), False);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10693 XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), prop_atom);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10694
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10695 /* Make sure the property is removed when we return. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10696 XFlush (FRAME_X_DISPLAY (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10697 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10698
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10699 return prop;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10700 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10701
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10702
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10703 DEFUN ("x-window-property", Fx_window_property, Sx_window_property,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10704 1, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10705 doc: /* Value is the value of window property PROP on FRAME.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
10706 If FRAME is nil or omitted, use the selected frame. Value is nil
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
10707 if FRAME hasn't a property with name PROP or if PROP has no string
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10708 value. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
10709 (prop, frame)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10710 Lisp_Object prop, frame;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10711 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10712 struct frame *f = check_x_frame (frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10713 Atom prop_atom;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10714 int rc;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10715 Lisp_Object prop_value = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10716 char *tmp_data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10717 Atom actual_type;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10718 int actual_format;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10719 unsigned long actual_size, bytes_remaining;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10720
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
10721 CHECK_STRING (prop);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10722 BLOCK_INPUT;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
10723 prop_atom = XInternAtom (FRAME_X_DISPLAY (f), SDATA (prop), False);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10724 rc = XGetWindowProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10725 prop_atom, 0, 0, False, XA_STRING,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10726 &actual_type, &actual_format, &actual_size,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10727 &bytes_remaining, (unsigned char **) &tmp_data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10728 if (rc == Success)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10729 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10730 int size = bytes_remaining;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10731
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10732 XFree (tmp_data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10733 tmp_data = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10734
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10735 rc = XGetWindowProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10736 prop_atom, 0, bytes_remaining,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10737 False, XA_STRING,
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10738 &actual_type, &actual_format,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10739 &actual_size, &bytes_remaining,
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10740 (unsigned char **) &tmp_data);
39277
df33715cdcf8 (Fx_window_property): Handle case that property gets
Gerd Moellmann <gerd@gnu.org>
parents: 39159
diff changeset
10741 if (rc == Success && tmp_data)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10742 prop_value = make_string (tmp_data, size);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10743
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10744 XFree (tmp_data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10745 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10746
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10747 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10748 return prop_value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10749 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10750
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10751
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10752
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10753 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10754 Busy cursor
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10755 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10756
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10757 /* If non-null, an asynchronous timer that, when it expires, displays
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10758 an hourglass cursor on all frames. */
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10759
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10760 static struct atimer *hourglass_atimer;
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10761
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10762 /* Non-zero means an hourglass cursor is currently shown. */
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10763
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10764 static int hourglass_shown_p;
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10765
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10766 /* Number of seconds to wait before displaying an hourglass cursor. */
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10767
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10768 static Lisp_Object Vhourglass_delay;
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10769
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10770 /* Default number of seconds to wait before displaying an hourglass
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10771 cursor. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10772
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10773 #define DEFAULT_HOURGLASS_DELAY 1
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10774
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10775 /* Function prototypes. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10776
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10777 static void show_hourglass P_ ((struct atimer *));
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10778 static void hide_hourglass P_ ((void));
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10779
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10780
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10781 /* Cancel a currently active hourglass timer, and start a new one. */
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10782
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10783 void
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10784 start_hourglass ()
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10785 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10786 EMACS_TIME delay;
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10787 int secs, usecs = 0;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10788
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10789 cancel_hourglass ();
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10790
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10791 if (INTEGERP (Vhourglass_delay)
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10792 && XINT (Vhourglass_delay) > 0)
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10793 secs = XFASTINT (Vhourglass_delay);
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10794 else if (FLOATP (Vhourglass_delay)
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10795 && XFLOAT_DATA (Vhourglass_delay) > 0)
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10796 {
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10797 Lisp_Object tem;
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10798 tem = Ftruncate (Vhourglass_delay, Qnil);
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10799 secs = XFASTINT (tem);
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10800 usecs = (XFLOAT_DATA (Vhourglass_delay) - secs) * 1000000;
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10801 }
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10802 else
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10803 secs = DEFAULT_HOURGLASS_DELAY;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10804
27915
e5b8e194d279 (start_busy_cursor): Allow floats for busy-cursor-delay.
Gerd Moellmann <gerd@gnu.org>
parents: 27902
diff changeset
10805 EMACS_SET_SECS_USECS (delay, secs, usecs);
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10806 hourglass_atimer = start_atimer (ATIMER_RELATIVE, delay,
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10807 show_hourglass, NULL);
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10808 }
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10809
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10810
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10811 /* Cancel the hourglass cursor timer if active, hide a busy cursor if
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10812 shown. */
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10813
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10814 void
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10815 cancel_hourglass ()
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10816 {
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10817 if (hourglass_atimer)
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10818 {
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10819 cancel_atimer (hourglass_atimer);
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10820 hourglass_atimer = NULL;
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10821 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10822
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10823 if (hourglass_shown_p)
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10824 hide_hourglass ();
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10825 }
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10826
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10827
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10828 /* Timer function of hourglass_atimer. TIMER is equal to
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10829 hourglass_atimer.
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10830
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10831 Display an hourglass pointer on all frames by mapping the frames'
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10832 hourglass_window. Set the hourglass_p flag in the frames'
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10833 output_data.x structure to indicate that an hourglass cursor is
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10834 shown on the frames. */
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10835
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10836 static void
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10837 show_hourglass (timer)
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10838 struct atimer *timer;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10839 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10840 /* The timer implementation will cancel this timer automatically
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10841 after this function has run. Set hourglass_atimer to null
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10842 so that we know the timer doesn't have to be canceled. */
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10843 hourglass_atimer = NULL;
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10844
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10845 if (!hourglass_shown_p)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10846 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10847 Lisp_Object rest, frame;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10848
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10849 BLOCK_INPUT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10850
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10851 FOR_EACH_FRAME (rest, frame)
34662
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10852 {
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10853 struct frame *f = XFRAME (frame);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10854
34662
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10855 if (FRAME_LIVE_P (f) && FRAME_X_P (f) && FRAME_X_DISPLAY (f))
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10856 {
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10857 Display *dpy = FRAME_X_DISPLAY (f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10858
34662
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10859 #ifdef USE_X_TOOLKIT
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10860 if (f->output_data.x->widget)
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10861 #else
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10862 if (FRAME_OUTER_WINDOW (f))
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10863 #endif
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10864 {
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10865 f->output_data.x->hourglass_p = 1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10866
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10867 if (!f->output_data.x->hourglass_window)
34662
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10868 {
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10869 unsigned long mask = CWCursor;
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10870 XSetWindowAttributes attrs;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10871
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10872 attrs.cursor = f->output_data.x->hourglass_cursor;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10873
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10874 f->output_data.x->hourglass_window
34662
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10875 = XCreateWindow (dpy, FRAME_OUTER_WINDOW (f),
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10876 0, 0, 32000, 32000, 0, 0,
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10877 InputOnly,
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10878 CopyFromParent,
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10879 mask, &attrs);
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10880 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10881
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10882 XMapRaised (dpy, f->output_data.x->hourglass_window);
34662
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10883 XFlush (dpy);
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10884 }
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10885 }
d8005f5e0a23 (show_busy_cursor): Check for live frames more
Gerd Moellmann <gerd@gnu.org>
parents: 34638
diff changeset
10886 }
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10887
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10888 hourglass_shown_p = 1;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10889 UNBLOCK_INPUT;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10890 }
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10891 }
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10892
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10893
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10894 /* Hide the hourglass pointer on all frames, if it is currently
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10895 shown. */
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10896
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10897 static void
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10898 hide_hourglass ()
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10899 {
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10900 if (hourglass_shown_p)
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10901 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10902 Lisp_Object rest, frame;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10903
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10904 BLOCK_INPUT;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10905 FOR_EACH_FRAME (rest, frame)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10906 {
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10907 struct frame *f = XFRAME (frame);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10908
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10909 if (FRAME_X_P (f)
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10910 /* Watch out for newly created frames. */
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10911 && f->output_data.x->hourglass_window)
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10912 {
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10913 XUnmapWindow (FRAME_X_DISPLAY (f),
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10914 f->output_data.x->hourglass_window);
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10915 /* Sync here because XTread_socket looks at the
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10916 hourglass_p flag that is reset to zero below. */
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10917 XSync (FRAME_X_DISPLAY (f), False);
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10918 f->output_data.x->hourglass_p = 0;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10919 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10920 }
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10921
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
10922 hourglass_shown_p = 0;
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10923 UNBLOCK_INPUT;
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
10924 }
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10925 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10926
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10927
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10928
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10929 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10930 Tool tips
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10931 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10932
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10933 static Lisp_Object x_create_tip_frame P_ ((struct x_display_info *,
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
10934 Lisp_Object, Lisp_Object));
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
10935 static void compute_tip_xy P_ ((struct frame *, Lisp_Object, Lisp_Object,
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
10936 Lisp_Object, int, int, int *, int *));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10937
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
10938 /* The frame of a currently visible tooltip. */
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
10939
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
10940 Lisp_Object tip_frame;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10941
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10942 /* If non-nil, a timer started that hides the last tooltip when it
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10943 fires. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10944
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10945 Lisp_Object tip_timer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10946 Window tip_window;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10947
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
10948 /* If non-nil, a vector of 3 elements containing the last args
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
10949 with which x-show-tip was called. See there. */
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
10950
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
10951 Lisp_Object last_show_tip_args;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
10952
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
10953 /* Maximum size for tooltips; a cons (COLUMNS . ROWS). */
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
10954
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
10955 Lisp_Object Vx_max_tooltip_size;
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
10956
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10957
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10958 static Lisp_Object
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10959 unwind_create_tip_frame (frame)
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10960 Lisp_Object frame;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10961 {
34638
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10962 Lisp_Object deleted;
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10963
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10964 deleted = unwind_create_frame (frame);
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10965 if (EQ (deleted, Qt))
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10966 {
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10967 tip_window = None;
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10968 tip_frame = Qnil;
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10969 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10970
34638
abb4510a89f6 (unwind_create_frame): Return t if frame was deleted.
Gerd Moellmann <gerd@gnu.org>
parents: 34598
diff changeset
10971 return deleted;
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10972 }
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10973
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10974
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10975 /* Create a frame for a tooltip on the display described by DPYINFO.
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
10976 PARMS is a list of frame parameters. TEXT is the string to
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
10977 display in the tip frame. Value is the frame.
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10978
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10979 Note that functions called here, esp. x_default_parameter can
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10980 signal errors, for instance when a specified color name is
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10981 undefined. We have to make sure that we're in a consistent state
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
10982 when this happens. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10983
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10984 static Lisp_Object
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
10985 x_create_tip_frame (dpyinfo, parms, text)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10986 struct x_display_info *dpyinfo;
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
10987 Lisp_Object parms, text;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10988 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10989 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10990 Lisp_Object frame, tem;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10991 Lisp_Object name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10992 long window_prompting = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10993 int width, height;
46285
3f111801efb4 Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45968
diff changeset
10994 int count = SPECPDL_INDEX ();
25715
feaedc03dbc8 (x_set_background_color): Remove unused variable(s).
Gerd Moellmann <gerd@gnu.org>
parents: 25691
diff changeset
10995 struct gcpro gcpro1, gcpro2, gcpro3;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
10996 struct kboard *kb;
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
10997 int face_change_count_before = face_change_count;
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
10998 Lisp_Object buffer;
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
10999 struct buffer *old_buffer;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11000
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11001 check_x ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11002
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11003 /* Use this general default value to start with until we know if
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11004 this frame has a specified name. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11005 Vx_resource_name = Vinvocation_name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11006
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11007 #ifdef MULTI_KBOARD
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11008 kb = dpyinfo->kboard;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11009 #else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11010 kb = &the_only_kboard;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11011 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11012
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11013 /* Get the name of the frame to use for resource lookup. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11014 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11015 if (!STRINGP (name)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11016 && !EQ (name, Qunbound)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11017 && !NILP (name))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11018 error ("Invalid frame name--not a string or nil");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11019 Vx_resource_name = name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11020
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11021 frame = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11022 GCPRO3 (parms, name, frame);
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11023 f = make_frame (1);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11024 XSETFRAME (frame, f);
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11025
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11026 buffer = Fget_buffer_create (build_string (" *tip*"));
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11027 Fset_window_buffer (FRAME_ROOT_WINDOW (f), buffer);
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11028 old_buffer = current_buffer;
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11029 set_buffer_internal_1 (XBUFFER (buffer));
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11030 current_buffer->truncate_lines = Qnil;
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11031 Ferase_buffer ();
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11032 Finsert (1, &text);
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11033 set_buffer_internal_1 (old_buffer);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11034
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11035 FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
34598
afd90be3ed75 (x_create_tip_frame): Use unwind_create_tip_frame,
Gerd Moellmann <gerd@gnu.org>
parents: 34549
diff changeset
11036 record_unwind_protect (unwind_create_tip_frame, frame);
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11037
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11038 /* By setting the output method, we're essentially saying that
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11039 the frame is live, as per FRAME_LIVE_P. If we get a signal
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11040 from this point on, x_destroy_window might screw up reference
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11041 counts etc. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11042 f->output_method = output_x_window;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11043 f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11044 bzero (f->output_data.x, sizeof (struct x_output));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11045 f->output_data.x->icon_bitmap = -1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11046 f->output_data.x->fontset = -1;
29882
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11047 f->output_data.x->scroll_bar_foreground_pixel = -1;
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11048 f->output_data.x->scroll_bar_background_pixel = -1;
39619
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
11049 #ifdef USE_TOOLKIT_SCROLL_BARS
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
11050 f->output_data.x->scroll_bar_top_shadow_pixel = -1;
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
11051 f->output_data.x->scroll_bar_bottom_shadow_pixel = -1;
1e12db2b25f0 (x_set_scroll_bar_background) [USE_TOOLKIT_SCROLL_BARS]:
Miles Bader <miles@gnu.org>
parents: 39591
diff changeset
11052 #endif /* USE_TOOLKIT_SCROLL_BARS */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11053 f->icon_name = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11054 FRAME_X_DISPLAY_INFO (f) = dpyinfo;
34895
53e52b3525bf Use #if GLYPH_DEBUG instead of #ifdef GLYPH_DEBUG.
Gerd Moellmann <gerd@gnu.org>
parents: 34662
diff changeset
11055 #if GLYPH_DEBUG
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11056 image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11057 dpyinfo_refcount = dpyinfo->reference_count;
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11058 #endif /* GLYPH_DEBUG */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11059 #ifdef MULTI_KBOARD
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11060 FRAME_KBOARD (f) = kb;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11061 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11062 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11063 f->output_data.x->explicit_parent = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11064
29882
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11065 /* These colors will be set anyway later, but it's important
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11066 to get the color reference counts right, so initialize them! */
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11067 {
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11068 Lisp_Object black;
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11069 struct gcpro gcpro1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11070
29882
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11071 black = build_string ("black");
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11072 GCPRO1 (black);
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11073 f->output_data.x->foreground_pixel
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11074 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11075 f->output_data.x->background_pixel
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11076 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11077 f->output_data.x->cursor_pixel
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11078 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11079 f->output_data.x->cursor_foreground_pixel
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11080 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11081 f->output_data.x->border_pixel
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11082 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11083 f->output_data.x->mouse_pixel
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11084 = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11085 UNGCPRO;
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11086 }
c12b0f070cd1 (x_create_tip_frame): Initialize frame's colors like
Gerd Moellmann <gerd@gnu.org>
parents: 29866
diff changeset
11087
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11088 /* Set the name; the functions to which we pass f expect the name to
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11089 be set. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11090 if (EQ (name, Qunbound) || NILP (name))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11091 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11092 f->name = build_string (dpyinfo->x_id_name);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11093 f->explicit_name = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11094 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11095 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11096 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11097 f->name = name;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11098 f->explicit_name = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11099 /* use the frame's title when getting resources for this frame. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11100 specbind (Qx_resource_name, name);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11101 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11102
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11103 /* Extract the window parameters from the supplied values that are
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11104 needed to determine window geometry. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11105 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11106 Lisp_Object font;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11107
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11108 font = x_get_arg (dpyinfo, parms, Qfont, "font", "Font", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11109
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11110 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11111 /* First, try whatever font the caller has specified. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11112 if (STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11113 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11114 tem = Fquery_fontset (font, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11115 if (STRINGP (tem))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
11116 font = x_new_fontset (f, SDATA (tem));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11117 else
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
11118 font = x_new_font (f, SDATA (font));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11119 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11120
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11121 /* Try out a font which we hope has bold and italic variations. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11122 if (!STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11123 font = x_new_font (f, "-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11124 if (!STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11125 font = x_new_font (f, "-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-1");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11126 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11127 font = x_new_font (f, "-*-*-medium-r-normal-*-*-140-*-*-c-*-iso8859-1");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11128 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11129 /* This was formerly the first thing tried, but it finds too many fonts
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11130 and takes too long. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11131 font = x_new_font (f, "-*-*-medium-r-*-*-*-*-*-*-c-*-iso8859-1");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11132 /* If those didn't work, look for something which will at least work. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11133 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11134 font = x_new_font (f, "-*-fixed-*-*-*-*-*-140-*-*-c-*-iso8859-1");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11135 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11136 if (! STRINGP (font))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11137 font = build_string ("fixed");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11138
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11139 x_default_parameter (f, parms, Qfont, font,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11140 "font", "Font", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11141 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11142
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11143 x_default_parameter (f, parms, Qborder_width, make_number (2),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11144 "borderWidth", "BorderWidth", RES_TYPE_NUMBER);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11145
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11146 /* This defaults to 2 in order to match xterm. We recognize either
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11147 internalBorderWidth or internalBorder (which is what xterm calls
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11148 it). */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11149 if (NILP (Fassq (Qinternal_border_width, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11150 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11151 Lisp_Object value;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11152
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11153 value = x_get_arg (dpyinfo, parms, Qinternal_border_width,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11154 "internalBorder", "internalBorder", RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11155 if (! EQ (value, Qunbound))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11156 parms = Fcons (Fcons (Qinternal_border_width, value),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11157 parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11158 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11159
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11160 x_default_parameter (f, parms, Qinternal_border_width, make_number (1),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11161 "internalBorderWidth", "internalBorderWidth",
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11162 RES_TYPE_NUMBER);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11163
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11164 /* Also do the stuff which must be set before the window exists. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11165 x_default_parameter (f, parms, Qforeground_color, build_string ("black"),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11166 "foreground", "Foreground", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11167 x_default_parameter (f, parms, Qbackground_color, build_string ("white"),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11168 "background", "Background", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11169 x_default_parameter (f, parms, Qmouse_color, build_string ("black"),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11170 "pointerColor", "Foreground", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11171 x_default_parameter (f, parms, Qcursor_color, build_string ("black"),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11172 "cursorColor", "Foreground", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11173 x_default_parameter (f, parms, Qborder_color, build_string ("black"),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11174 "borderColor", "BorderColor", RES_TYPE_STRING);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11175
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11176 /* Init faces before x_default_parameter is called for scroll-bar
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11177 parameters because that function calls x_set_scroll_bar_width,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11178 which calls change_frame_size, which calls Fset_window_buffer,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11179 which runs hooks, which call Fvertical_motion. At the end, we
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11180 end up in init_iterator with a null face cache, which should not
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11181 happen. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11182 init_frame_faces (f);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11183
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11184 f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11185 window_prompting = x_figure_window_size (f, parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11186
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11187 if (window_prompting & XNegative)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11188 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11189 if (window_prompting & YNegative)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11190 f->output_data.x->win_gravity = SouthEastGravity;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11191 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11192 f->output_data.x->win_gravity = NorthEastGravity;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11193 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11194 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11195 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11196 if (window_prompting & YNegative)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11197 f->output_data.x->win_gravity = SouthWestGravity;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11198 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11199 f->output_data.x->win_gravity = NorthWestGravity;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11200 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11201
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11202 f->output_data.x->size_hint_flags = window_prompting;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11203 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11204 XSetWindowAttributes attrs;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11205 unsigned long mask;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11206
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11207 BLOCK_INPUT;
33657
e9cf01c7cda6 (x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents: 33601
diff changeset
11208 mask = CWBackPixel | CWOverrideRedirect | CWEventMask;
e9cf01c7cda6 (x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents: 33601
diff changeset
11209 if (DoesSaveUnders (dpyinfo->screen))
e9cf01c7cda6 (x_create_tip_frame): Use CWSaveUnder only if the
Gerd Moellmann <gerd@gnu.org>
parents: 33601
diff changeset
11210 mask |= CWSaveUnder;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11211
27987
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
11212 /* Window managers look at the override-redirect flag to determine
ce9edc646960 (x_defined_color, x_set_mouse_color, lookup_rgb_color)
Gerd Moellmann <gerd@gnu.org>
parents: 27963
diff changeset
11213 whether or net to give windows a decoration (Xlib spec, chapter
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11214 3.2.8). */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11215 attrs.override_redirect = True;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11216 attrs.save_under = True;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11217 attrs.background_pixel = FRAME_BACKGROUND_PIXEL (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11218 /* Arrange for getting MapNotify and UnmapNotify events. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11219 attrs.event_mask = StructureNotifyMask;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11220 tip_window
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11221 = FRAME_X_WINDOW (f)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11222 = XCreateWindow (FRAME_X_DISPLAY (f),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11223 FRAME_X_DISPLAY_INFO (f)->root_window,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11224 /* x, y, width, height */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11225 0, 0, 1, 1,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11226 /* Border. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11227 1,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11228 CopyFromParent, InputOutput, CopyFromParent,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11229 mask, &attrs);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11230 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11231 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11232
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11233 x_make_gc (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11234
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11235 x_default_parameter (f, parms, Qauto_raise, Qnil,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11236 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11237 x_default_parameter (f, parms, Qauto_lower, Qnil,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11238 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11239 x_default_parameter (f, parms, Qcursor_type, Qbox,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11240 "cursorType", "CursorType", RES_TYPE_SYMBOL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11241
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11242 /* Dimensions, especially f->height, must be done via change_frame_size.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11243 Change will not be effected unless different from the current
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11244 f->height. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11245 width = f->width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11246 height = f->height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11247 f->height = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11248 SET_FRAME_WIDTH (f, 0);
25363
bf0488244270 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25335
diff changeset
11249 change_frame_size (f, height, width, 1, 0, 0);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11250
47731
755c4233cfba * frame.c (Vdelete_frame_functions): New variable.
John Paul Wallington <jpw@pobox.com>
parents: 47434
diff changeset
11251 /* Add `tooltip' frame parameter's default value. */
755c4233cfba * frame.c (Vdelete_frame_functions): New variable.
John Paul Wallington <jpw@pobox.com>
parents: 47434
diff changeset
11252 if (NILP (Fframe_parameter (frame, intern ("tooltip"))))
755c4233cfba * frame.c (Vdelete_frame_functions): New variable.
John Paul Wallington <jpw@pobox.com>
parents: 47434
diff changeset
11253 Fmodify_frame_parameters (frame, Fcons (Fcons (intern ("tooltip"), Qt),
755c4233cfba * frame.c (Vdelete_frame_functions): New variable.
John Paul Wallington <jpw@pobox.com>
parents: 47434
diff changeset
11254 Qnil));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11255
35042
3088c9745e92 (x_create_tip_frame): Call face-set-after-frame-default,
Gerd Moellmann <gerd@gnu.org>
parents: 34976
diff changeset
11256 /* Set up faces after all frame parameters are known. This call
35508
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11257 also merges in face attributes specified for new frames.
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11258
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11259 Frame parameters may be changed if .Xdefaults contains
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11260 specifications for the default font. For example, if there is an
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11261 `Emacs.default.attributeBackground: pink', the `background-color'
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11262 attribute of the frame get's set, which let's the internal border
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11263 of the tooltip frame appear in pink. Prevent this. */
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11264 {
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11265 Lisp_Object bg = Fframe_parameter (frame, Qbackground_color);
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11266
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11267 /* Set tip_frame here, so that */
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11268 tip_frame = frame;
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11269 call1 (Qface_set_after_frame_default, frame);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11270
35508
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11271 if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11272 Fmodify_frame_parameters (frame, Fcons (Fcons (Qbackground_color, bg),
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11273 Qnil));
0bd627ce1af8 (x_create_tip_frame): Prevent changing the tooltip's
Gerd Moellmann <gerd@gnu.org>
parents: 35402
diff changeset
11274 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11275
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11276 f->no_split = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11277
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11278 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11279
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11280 /* It is now ok to make the frame official even if we get an error
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11281 below. And the frame needs to be on Vframe_list or making it
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11282 visible won't work. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11283 Vframe_list = Fcons (frame, Vframe_list);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11284
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11285 /* Now that the frame is official, it counts as a reference to
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11286 its display. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11287 FRAME_X_DISPLAY_INFO (f)->reference_count++;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11288
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11289 /* Setting attributes of faces of the tooltip frame from resources
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11290 and similar will increment face_change_count, which leads to the
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11291 clearing of all current matrices. Since this isn't necessary
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11292 here, avoid it by resetting face_change_count to the value it
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11293 had before we created the tip frame. */
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11294 face_change_count = face_change_count_before;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11295
34524
d4b8782e7f7b (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
Gerd Moellmann <gerd@gnu.org>
parents: 34512
diff changeset
11296 /* Discard the unwind_protect. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11297 return unbind_to (count, frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11298 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11299
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11300
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11301 /* Compute where to display tip frame F. PARMS is the list of frame
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11302 parameters for F. DX and DY are specified offsets from the current
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11303 location of the mouse. WIDTH and HEIGHT are the width and height
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11304 of the tooltip. Return coordinates relative to the root window of
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11305 the display in *ROOT_X, and *ROOT_Y. */
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11306
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11307 static void
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11308 compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y)
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11309 struct frame *f;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11310 Lisp_Object parms, dx, dy;
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11311 int width, height;
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11312 int *root_x, *root_y;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11313 {
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11314 Lisp_Object left, top;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11315 int win_x, win_y;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11316 Window root, child;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11317 unsigned pmask;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11318
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11319 /* User-specified position? */
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11320 left = Fcdr (Fassq (Qleft, parms));
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11321 top = Fcdr (Fassq (Qtop, parms));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11322
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11323 /* Move the tooltip window where the mouse pointer is. Resize and
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11324 show it. */
41449
4416668397d7 (compute_tip_xy): Initialize root_x and root_y from
Jason Rumney <jasonr@gnu.org>
parents: 41132
diff changeset
11325 if (!INTEGERP (left) || !INTEGERP (top))
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11326 {
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11327 BLOCK_INPUT;
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11328 XQueryPointer (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window,
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11329 &root, &child, root_x, root_y, &win_x, &win_y, &pmask);
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11330 UNBLOCK_INPUT;
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11331 }
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11332
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11333 if (INTEGERP (top))
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11334 *root_y = XINT (top);
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11335 else if (*root_y + XINT (dy) - height < 0)
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11336 *root_y -= XINT (dy);
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11337 else
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11338 {
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11339 *root_y -= height;
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11340 *root_y += XINT (dy);
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11341 }
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11342
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11343 if (INTEGERP (left))
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11344 *root_x = XINT (left);
42247
35dd407f04cd (compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents: 42123
diff changeset
11345 else if (*root_x + XINT (dx) + width <= FRAME_X_DISPLAY_INFO (f)->width)
35dd407f04cd (compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents: 42123
diff changeset
11346 /* It fits to the right of the pointer. */
35dd407f04cd (compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents: 42123
diff changeset
11347 *root_x += XINT (dx);
35dd407f04cd (compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents: 42123
diff changeset
11348 else if (width + XINT (dx) <= *root_x)
35dd407f04cd (compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents: 42123
diff changeset
11349 /* It fits to the left of the pointer. */
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11350 *root_x -= width + XINT (dx);
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11351 else
42247
35dd407f04cd (compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents: 42123
diff changeset
11352 /* Put it left-justified on the screen--it ought to fit that way. */
35dd407f04cd (compute_tip_xy): If tooltip won't fit on the screen
Richard M. Stallman <rms@gnu.org>
parents: 42123
diff changeset
11353 *root_x = 0;
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11354 }
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11355
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11356
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11357 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11358 doc: /* Show STRING in a "tooltip" window on frame FRAME.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11359 A tooltip window is a small X window displaying a string.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11360
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11361 FRAME nil or omitted means use the selected frame.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11362
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11363 PARMS is an optional list of frame parameters which can be used to
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11364 change the tooltip's appearance.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11365
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11366 Automatically hide the tooltip after TIMEOUT seconds. TIMEOUT nil
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11367 means use the default timeout of 5 seconds.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11368
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11369 If the list of frame parameters PARAMS contains a `left' parameters,
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11370 the tooltip is displayed at that x-position. Otherwise it is
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11371 displayed at the mouse position, with offset DX added (default is 5 if
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11372 DX isn't specified). Likewise for the y-position; if a `top' frame
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11373 parameter is specified, it determines the y-position of the tooltip
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11374 window, otherwise it is displayed at the mouse position, with offset
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11375 DY added (default is -10).
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11376
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11377 A tooltip's maximum size is specified by `x-max-tooltip-size'.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11378 Text larger than the specified size is clipped. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11379 (string, frame, parms, timeout, dx, dy)
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11380 Lisp_Object string, frame, parms, timeout, dx, dy;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11381 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11382 struct frame *f;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11383 struct window *w;
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11384 int root_x, root_y;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11385 struct buffer *old_buffer;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11386 struct text_pos pos;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11387 int i, width, height;
26980
f0d5e95ccce9 (Fx_show_tip): Gcpro `timeout' too.
Dave Love <fx@gnu.org>
parents: 26978
diff changeset
11388 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11389 int old_windows_or_buffers_changed = windows_or_buffers_changed;
46285
3f111801efb4 Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45968
diff changeset
11390 int count = SPECPDL_INDEX ();
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11391
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11392 specbind (Qinhibit_redisplay, Qt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11393
26980
f0d5e95ccce9 (Fx_show_tip): Gcpro `timeout' too.
Dave Love <fx@gnu.org>
parents: 26978
diff changeset
11394 GCPRO4 (string, parms, frame, timeout);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11395
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
11396 CHECK_STRING (string);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11397 f = check_x_frame (frame);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11398 if (NILP (timeout))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11399 timeout = make_number (5);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11400 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
11401 CHECK_NATNUM (timeout);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11402
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11403 if (NILP (dx))
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11404 dx = make_number (5);
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11405 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
11406 CHECK_NUMBER (dx);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11407
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11408 if (NILP (dy))
33589
5832e9020859 (Fx_show_tip): Use default y-offset of -10 so that
Gerd Moellmann <gerd@gnu.org>
parents: 33443
diff changeset
11409 dy = make_number (-10);
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11410 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
11411 CHECK_NUMBER (dy);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11412
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11413 if (NILP (last_show_tip_args))
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11414 last_show_tip_args = Fmake_vector (make_number (3), Qnil);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11415
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11416 if (!NILP (tip_frame))
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11417 {
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11418 Lisp_Object last_string = AREF (last_show_tip_args, 0);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11419 Lisp_Object last_frame = AREF (last_show_tip_args, 1);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11420 Lisp_Object last_parms = AREF (last_show_tip_args, 2);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11421
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11422 if (EQ (frame, last_frame)
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11423 && !NILP (Fequal (last_string, string))
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11424 && !NILP (Fequal (last_parms, parms)))
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11425 {
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11426 struct frame *f = XFRAME (tip_frame);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11427
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11428 /* Only DX and DY have changed. */
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11429 if (!NILP (tip_timer))
35402
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
11430 {
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
11431 Lisp_Object timer = tip_timer;
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
11432 tip_timer = Qnil;
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
11433 call1 (Qcancel_timer, timer);
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
11434 }
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11435
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11436 BLOCK_INPUT;
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11437 compute_tip_xy (f, parms, dx, dy, PIXEL_WIDTH (f),
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11438 PIXEL_HEIGHT (f), &root_x, &root_y);
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11439 XMoveWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11440 root_x, root_y);
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11441 UNBLOCK_INPUT;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11442 goto start_timer;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11443 }
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11444 }
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11445
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11446 /* Hide a previous tip, if any. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11447 Fx_hide_tip ();
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11448
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11449 ASET (last_show_tip_args, 0, string);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11450 ASET (last_show_tip_args, 1, frame);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11451 ASET (last_show_tip_args, 2, parms);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11452
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11453 /* Add default values to frame parameters. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11454 if (NILP (Fassq (Qname, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11455 parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11456 if (NILP (Fassq (Qinternal_border_width, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11457 parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11458 if (NILP (Fassq (Qborder_width, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11459 parms = Fcons (Fcons (Qborder_width, make_number (1)), parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11460 if (NILP (Fassq (Qborder_color, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11461 parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11462 if (NILP (Fassq (Qbackground_color, parms)))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11463 parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11464 parms);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11465
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11466 /* Create a frame for the tooltip, and record it in the global
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11467 variable tip_frame. */
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11468 frame = x_create_tip_frame (FRAME_X_DISPLAY_INFO (f), parms, string);
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11469 f = XFRAME (frame);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11470
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11471 /* Set up the frame's root window. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11472 w = XWINDOW (FRAME_ROOT_WINDOW (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11473 w->left = w->top = make_number (0);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11474
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11475 if (CONSP (Vx_max_tooltip_size)
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11476 && INTEGERP (XCAR (Vx_max_tooltip_size))
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11477 && XINT (XCAR (Vx_max_tooltip_size)) > 0
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11478 && INTEGERP (XCDR (Vx_max_tooltip_size))
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11479 && XINT (XCDR (Vx_max_tooltip_size)) > 0)
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11480 {
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11481 w->width = XCAR (Vx_max_tooltip_size);
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11482 w->height = XCDR (Vx_max_tooltip_size);
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11483 }
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11484 else
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11485 {
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11486 w->width = make_number (80);
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11487 w->height = make_number (40);
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11488 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11489
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11490 f->window_width = XINT (w->width);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11491 adjust_glyphs (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11492 w->pseudo_window_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11493
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11494 /* Display the tooltip text in a temporary buffer. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11495 old_buffer = current_buffer;
36869
a9cbe17061fc (x_create_tip_frame): Add parameter TEXT. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 36594
diff changeset
11496 set_buffer_internal_1 (XBUFFER (XWINDOW (FRAME_ROOT_WINDOW (f))->buffer));
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11497 current_buffer->truncate_lines = Qnil;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11498 clear_glyph_matrix (w->desired_matrix);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11499 clear_glyph_matrix (w->current_matrix);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11500 SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11501 try_window (FRAME_ROOT_WINDOW (f), pos);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11502
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11503 /* Compute width and height of the tooltip. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11504 width = height = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11505 for (i = 0; i < w->desired_matrix->nrows; ++i)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11506 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11507 struct glyph_row *row = &w->desired_matrix->rows[i];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11508 struct glyph *last;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11509 int row_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11510
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11511 /* Stop at the first empty row at the end. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11512 if (!row->enabled_p || !row->displays_text_p)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11513 break;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11514
25082
ba6bf065b287 (x_create_tip_frame): Don't set bitmapIcon resource.
Gerd Moellmann <gerd@gnu.org>
parents: 25075
diff changeset
11515 /* Let the row go over the full width of the frame. */
ba6bf065b287 (x_create_tip_frame): Don't set bitmapIcon resource.
Gerd Moellmann <gerd@gnu.org>
parents: 25075
diff changeset
11516 row->full_width_p = 1;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11517
28410
2812a333e746 (free_image_cache): Free the cache structure itself
Gerd Moellmann <gerd@gnu.org>
parents: 28355
diff changeset
11518 /* There's a glyph at the end of rows that is used to place
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11519 the cursor there. Don't include the width of this glyph. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11520 if (row->used[TEXT_AREA])
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11521 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11522 last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11523 row_width = row->pixel_width - last->pixel_width;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11524 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11525 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11526 row_width = row->pixel_width;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11527
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11528 height += row->height;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11529 width = max (width, row_width);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11530 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11531
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11532 /* Add the frame's internal border to the width and height the X
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11533 window should have. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11534 height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11535 width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11536
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11537 /* Move the tooltip window where the mouse pointer is. Resize and
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11538 show it. */
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11539 compute_tip_xy (f, parms, dx, dy, width, height, &root_x, &root_y);
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11540
30224
b9f781194989 (Fx_show_tip): If frame parameters contain a position,
Gerd Moellmann <gerd@gnu.org>
parents: 29947
diff changeset
11541 BLOCK_INPUT;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11542 XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
37253
7c3a00620335 (compute_tip_xy): Add parameters WIDTH and HEIGHT.
Gerd Moellmann <gerd@gnu.org>
parents: 37210
diff changeset
11543 root_x, root_y, width, height);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11544 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11545 UNBLOCK_INPUT;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11546
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11547 /* Draw into the window. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11548 w->must_be_updated_p = 1;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11549 update_single_window (w, 1);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11550
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11551 /* Restore original current buffer. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11552 set_buffer_internal_1 (old_buffer);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11553 windows_or_buffers_changed = old_windows_or_buffers_changed;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11554
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
11555 start_timer:
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11556 /* Let the tip disappear after timeout seconds. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11557 tip_timer = call3 (intern ("run-at-time"), timeout, Qnil,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11558 intern ("x-hide-tip"));
26954
e388d69f4269 (Fx_show_tip): Add missing UNGCPRO.
Dave Love <fx@gnu.org>
parents: 26876
diff changeset
11559
e388d69f4269 (Fx_show_tip): Add missing UNGCPRO.
Dave Love <fx@gnu.org>
parents: 26876
diff changeset
11560 UNGCPRO;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11561 return unbind_to (count, Qnil);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11562 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11563
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11564
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11565 DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11566 doc: /* Hide the current tooltip window, if there is any.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11567 Value is t if tooltip was open, nil otherwise. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11568 ()
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11569 {
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11570 int count;
34476
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11571 Lisp_Object deleted, frame, timer;
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11572 struct gcpro gcpro1, gcpro2;
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11573
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11574 /* Return quickly if nothing to do. */
34476
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11575 if (NILP (tip_timer) && NILP (tip_frame))
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11576 return Qnil;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11577
34476
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11578 frame = tip_frame;
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11579 timer = tip_timer;
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11580 GCPRO2 (frame, timer);
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11581 tip_frame = tip_timer = deleted = Qnil;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11582
46285
3f111801efb4 Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45968
diff changeset
11583 count = SPECPDL_INDEX ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11584 specbind (Qinhibit_redisplay, Qt);
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11585 specbind (Qinhibit_quit, Qt);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11586
34476
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11587 if (!NILP (timer))
35402
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
11588 call1 (Qcancel_timer, timer);
34476
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11589
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11590 if (FRAMEP (frame))
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11591 {
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11592 Fdelete_frame (frame, Qnil);
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11593 deleted = Qt;
33713
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11594
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11595 #ifdef USE_LUCID
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11596 /* Bloodcurdling hack alert: The Lucid menu bar widget's
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11597 redisplay procedure is not called when a tip frame over menu
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11598 items is unmapped. Redisplay the menu manually... */
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11599 {
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11600 struct frame *f = SELECTED_FRAME ();
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11601 Widget w = f->output_data.x->menubar_widget;
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11602 extern void xlwmenu_redisplay P_ ((Widget));
39675
a4def4204419 *** empty log message ***
Pavel Janík <Pavel@Janik.cz>
parents: 39619
diff changeset
11603
33713
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11604 if (!DoesSaveUnders (FRAME_X_DISPLAY_INFO (f)->screen)
36441
861557fe5809 (Fx_hide_tip): Don't use `None' with widgets; use
Gerd Moellmann <gerd@gnu.org>
parents: 36252
diff changeset
11605 && w != NULL)
33713
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11606 {
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11607 BLOCK_INPUT;
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11608 xlwmenu_redisplay (w);
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11609 UNBLOCK_INPUT;
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11610 }
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11611 }
91b2daa9479f (Fx_hide_tip) [USE_LUCID]: Add a hack to redisplay
Gerd Moellmann <gerd@gnu.org>
parents: 33657
diff changeset
11612 #endif /* USE_LUCID */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11613 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11614
34476
329225ae6b61 (Fx_hide_tip): Simplified.
Gerd Moellmann <gerd@gnu.org>
parents: 34452
diff changeset
11615 UNGCPRO;
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
11616 return unbind_to (count, deleted);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11617 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11618
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11619
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11620
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11621 /***********************************************************************
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11622 File selection dialog
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11623 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11624
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11625 #ifdef USE_MOTIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11626
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11627 /* Callback for "OK" and "Cancel" on file selection dialog. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11628
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11629 static void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11630 file_dialog_cb (widget, client_data, call_data)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11631 Widget widget;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11632 XtPointer call_data, client_data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11633 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11634 int *result = (int *) client_data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11635 XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11636 *result = cb->reason;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11637 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11638
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11639
37556
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11640 /* Callback for unmapping a file selection dialog. This is used to
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11641 capture the case where a dialog is closed via a window manager's
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11642 closer button, for example. Using a XmNdestroyCallback didn't work
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11643 in this case. */
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11644
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11645 static void
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11646 file_dialog_unmap_cb (widget, client_data, call_data)
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11647 Widget widget;
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11648 XtPointer call_data, client_data;
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11649 {
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11650 int *result = (int *) client_data;
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11651 *result = XmCR_CANCEL;
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11652 }
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11653
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11654
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11655 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 4, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11656 doc: /* Read file name, prompting with PROMPT in directory DIR.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11657 Use a file selection dialog.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11658 Select DEFAULT-FILENAME in the dialog's file selection box, if
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11659 specified. Don't let the user enter a file name in the file
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11660 selection dialog's entry field, if MUSTMATCH is non-nil. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11661 (prompt, dir, default_filename, mustmatch)
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11662 Lisp_Object prompt, dir, default_filename, mustmatch;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11663 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11664 int result;
25679
8b09c5927f1c (QCfile): Moved to xdisp.c.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
11665 struct frame *f = SELECTED_FRAME ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11666 Lisp_Object file = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11667 Widget dialog, text, list, help;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11668 Arg al[10];
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11669 int ac = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11670 extern XtAppContext Xt_app_con;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11671 XmString dir_xmstring, pattern_xmstring;
46295
b77ef572e1c9 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46285
diff changeset
11672 int count = SPECPDL_INDEX ();
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11673 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11674
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11675 GCPRO5 (prompt, dir, default_filename, mustmatch, file);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
11676 CHECK_STRING (prompt);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40608
diff changeset
11677 CHECK_STRING (dir);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11678
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11679 /* Prevent redisplay. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11680 specbind (Qinhibit_redisplay, Qt);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11681
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11682 BLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11683
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11684 /* Create the dialog with PROMPT as title, using DIR as initial
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11685 directory and using "*" as pattern. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11686 dir = Fexpand_file_name (dir, Qnil);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
11687 dir_xmstring = XmStringCreateLocalized (SDATA (dir));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11688 pattern_xmstring = XmStringCreateLocalized ("*");
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11689
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
11690 XtSetArg (al[ac], XmNtitle, SDATA (prompt)); ++ac;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11691 XtSetArg (al[ac], XmNdirectory, dir_xmstring); ++ac;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11692 XtSetArg (al[ac], XmNpattern, pattern_xmstring); ++ac;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11693 XtSetArg (al[ac], XmNresizePolicy, XmRESIZE_GROW); ++ac;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11694 XtSetArg (al[ac], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); ++ac;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11695 dialog = XmCreateFileSelectionDialog (f->output_data.x->widget,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11696 "fsb", al, ac);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11697 XmStringFree (dir_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11698 XmStringFree (pattern_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11699
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11700 /* Add callbacks for OK and Cancel. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11701 XtAddCallback (dialog, XmNokCallback, file_dialog_cb,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11702 (XtPointer) &result);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11703 XtAddCallback (dialog, XmNcancelCallback, file_dialog_cb,
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11704 (XtPointer) &result);
37556
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11705 XtAddCallback (dialog, XmNunmapCallback, file_dialog_unmap_cb,
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11706 (XtPointer) &result);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11707
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11708 /* Disable the help button since we can't display help. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11709 help = XmFileSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11710 XtSetSensitive (help, False);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11711
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11712 /* Mark OK button as default. */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11713 XtVaSetValues (XmFileSelectionBoxGetChild (dialog, XmDIALOG_OK_BUTTON),
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11714 XmNshowAsDefault, True, NULL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11715
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11716 /* If MUSTMATCH is non-nil, disable the file entry field of the
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11717 dialog, so that the user must select a file from the files list
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11718 box. We can't remove it because we wouldn't have a way to get at
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11719 the result file name, then. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11720 text = XmFileSelectionBoxGetChild (dialog, XmDIALOG_TEXT);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11721 if (!NILP (mustmatch))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11722 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11723 Widget label;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11724 label = XmFileSelectionBoxGetChild (dialog, XmDIALOG_SELECTION_LABEL);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11725 XtSetSensitive (text, False);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11726 XtSetSensitive (label, False);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11727 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11728
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11729 /* Manage the dialog, so that list boxes get filled. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11730 XtManageChild (dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11731
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11732 /* Select DEFAULT_FILENAME in the files list box. DEFAULT_FILENAME
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11733 must include the path for this to work. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11734 list = XmFileSelectionBoxGetChild (dialog, XmDIALOG_LIST);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11735 if (STRINGP (default_filename))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11736 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11737 XmString default_xmstring;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11738 int item_pos;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11739
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11740 default_xmstring
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46295
diff changeset
11741 = XmStringCreateLocalized (SDATA (default_filename));
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11742
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11743 if (!XmListItemExists (list, default_xmstring))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11744 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11745 /* Add a new item if DEFAULT_FILENAME is not in the list. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11746 XmListAddItem (list, default_xmstring, 0);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11747 item_pos = 0;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11748 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11749 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11750 item_pos = XmListItemPos (list, default_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11751 XmStringFree (default_xmstring);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11752
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11753 /* Select the item and scroll it into view. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11754 XmListSelectPos (list, item_pos, True);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11755 XmListSetPos (list, item_pos);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11756 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11757
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49080
diff changeset
11758 /* Process events until the user presses Cancel or OK. */
29866
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
11759 result = 0;
37556
171c0f4964a9 (file_dialog_unmap_cb): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37253
diff changeset
11760 while (result == 0)
38548
58603538f196 (Fx_file_dialog): Block/unblock input while processing
Gerd Moellmann <gerd@gnu.org>
parents: 38542
diff changeset
11761 {
49117
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49080
diff changeset
11762 XEvent event;
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49080
diff changeset
11763 XtAppNextEvent (Xt_app_con, &event);
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49080
diff changeset
11764 x_dispatch_event (&event, FRAME_X_DISPLAY (f) );
f8288cd7d1cd *** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents: 49080
diff changeset
11765 }
29866
c31c4d7dd0e0 (Fx_file_dialog) [HAVE_MOTIF_2_1]: Handle events
Gerd Moellmann <gerd@gnu.org>
parents: 29728
diff changeset
11766
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11767 /* Get the result. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11768 if (result == XmCR_OK)
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11769 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11770 XmString text;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11771 String data;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11772
30573
3bb43339533c (Fx_file_dialog): Use NULL instead of 0 at the end of
Gerd Moellmann <gerd@gnu.org>
parents: 30383
diff changeset
11773 XtVaGetValues (dialog, XmNtextString, &text, NULL);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11774 XmStringGetLtoR (text, XmFONTLIST_DEFAULT_TAG, &data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11775 XmStringFree (text);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11776 file = build_string (data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11777 XtFree (data);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11778 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11779 else
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11780 file = Qnil;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11781
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11782 /* Clean up. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11783 XtUnmanageChild (dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11784 XtDestroyWidget (dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11785 UNBLOCK_INPUT;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11786 UNGCPRO;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11787
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11788 /* Make "Cancel" equivalent to C-g. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11789 if (NILP (file))
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11790 Fsignal (Qquit, Qnil);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11791
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11792 return unbind_to (count, file);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11793 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11794
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11795 #endif /* USE_MOTIF */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11796
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11797 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11798
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11799 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 4, 0,
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11800 "Read file name, prompting with PROMPT in directory DIR.\n\
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11801 Use a file selection dialog.\n\
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11802 Select DEFAULT-FILENAME in the dialog's file selection box, if\n\
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11803 specified. Don't let the user enter a file name in the file\n\
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11804 selection dialog's entry field, if MUSTMATCH is non-nil.")
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11805 (prompt, dir, default_filename, mustmatch)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11806 Lisp_Object prompt, dir, default_filename, mustmatch;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11807 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11808 FRAME_PTR f = SELECTED_FRAME ();
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11809 char *fn;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11810 Lisp_Object file = Qnil;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11811 int count = specpdl_ptr - specpdl;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11812 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11813 char *cdef_file;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11814 char *cprompt;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11815
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11816 GCPRO5 (prompt, dir, default_filename, mustmatch, file);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11817 CHECK_STRING (prompt);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11818 CHECK_STRING (dir);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11819
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11820 /* Prevent redisplay. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11821 specbind (Qinhibit_redisplay, Qt);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11822
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11823 BLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11824
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11825 if (STRINGP (default_filename))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11826 cdef_file = SDATA (default_filename);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11827 else
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11828 cdef_file = SDATA (dir);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11829
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11830 fn = xg_get_file_name (f, SDATA (prompt), cdef_file, ! NILP (mustmatch));
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11831
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11832 if (fn)
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11833 {
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11834 file = build_string (fn);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11835 xfree (fn);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11836 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11837
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11838 UNBLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11839 UNGCPRO;
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11840
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11841 /* Make "Cancel" equivalent to C-g. */
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11842 if (NILP (file))
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11843 Fsignal (Qquit, Qnil);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11844
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11845 return unbind_to (count, file);
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11846 }
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11847
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11848 #endif /* USE_GTK */
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11849
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11850
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11851 /***********************************************************************
34549
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11852 Keyboard
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11853 ***********************************************************************/
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11854
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11855 #ifdef HAVE_XKBGETKEYBOARD
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11856 #include <X11/XKBlib.h>
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11857 #include <X11/keysym.h>
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11858 #endif
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11859
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11860 DEFUN ("x-backspace-delete-keys-p", Fx_backspace_delete_keys_p,
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11861 Sx_backspace_delete_keys_p, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11862 doc: /* Check if both Backspace and Delete keys are on the keyboard of FRAME.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11863 FRAME nil means use the selected frame.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
11864 Value is t if we know that both keys are present, and are mapped to the
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11865 usual X keysyms. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
11866 (frame)
34549
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11867 Lisp_Object frame;
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11868 {
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11869 #ifdef HAVE_XKBGETKEYBOARD
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11870 XkbDescPtr kb;
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11871 struct frame *f = check_x_frame (frame);
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11872 Display *dpy = FRAME_X_DISPLAY (f);
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11873 Lisp_Object have_keys;
34911
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11874 int major, minor, op, event, error;
34549
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11875
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11876 BLOCK_INPUT;
34911
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11877
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11878 /* Check library version in case we're dynamically linked. */
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11879 major = XkbMajorVersion;
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11880 minor = XkbMinorVersion;
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11881 if (!XkbLibraryVersion (&major, &minor))
35191
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11882 {
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11883 UNBLOCK_INPUT;
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11884 return Qnil;
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11885 }
34911
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11886
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11887 /* Check that the server supports XKB. */
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11888 major = XkbMajorVersion;
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11889 minor = XkbMinorVersion;
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11890 if (!XkbQueryExtension (dpy, &op, &event, &error, &major, &minor))
35191
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11891 {
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11892 UNBLOCK_INPUT;
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11893 return Qnil;
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11894 }
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11895
34911
4cdfcac861d7 (Fx_backspace_delete_keys_p): Check library and server
Gerd Moellmann <gerd@gnu.org>
parents: 34895
diff changeset
11896 have_keys = Qnil;
35191
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11897 kb = XkbGetMap (dpy, XkbAllMapComponentsMask, XkbUseCoreKbd);
34549
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11898 if (kb)
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11899 {
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11900 int delete_keycode = 0, backspace_keycode = 0, i;
35191
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11901
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11902 if (XkbGetNames (dpy, XkbAllNamesMask, kb) == Success)
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11903 {
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11904 for (i = kb->min_key_code;
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11905 (i < kb->max_key_code
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11906 && (delete_keycode == 0 || backspace_keycode == 0));
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11907 ++i)
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11908 {
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11909 /* The XKB symbolic key names can be seen most easily in
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11910 the PS file generated by `xkbprint -label name
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
11911 $DISPLAY'. */
35191
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11912 if (bcmp ("DELE", kb->names->keys[i].name, 4) == 0)
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11913 delete_keycode = i;
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11914 else if (bcmp ("BKSP", kb->names->keys[i].name, 4) == 0)
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11915 backspace_keycode = i;
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11916 }
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11917
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11918 XkbFreeNames (kb, 0, True);
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11919 }
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11920
3de883052d49 (Fx_backspace_delete_keys_p): Use XkbGetMap and
Gerd Moellmann <gerd@gnu.org>
parents: 35146
diff changeset
11921 XkbFreeClientMap (kb, 0, True);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
11922
34549
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11923 if (delete_keycode
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11924 && backspace_keycode
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11925 && XKeysymToKeycode (dpy, XK_Delete) == delete_keycode
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11926 && XKeysymToKeycode (dpy, XK_BackSpace) == backspace_keycode)
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11927 have_keys = Qt;
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11928 }
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11929 UNBLOCK_INPUT;
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11930 return have_keys;
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11931 #else /* not HAVE_XKBGETKEYBOARD */
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11932 return Qnil;
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11933 #endif /* not HAVE_XKBGETKEYBOARD */
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11934 }
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11935
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11936
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11937
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
11938 /***********************************************************************
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11939 Initialization
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11940 ***********************************************************************/
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
11941
21846
486ac68ce051 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21779
diff changeset
11942 void
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11943 syms_of_xfns ()
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11944 {
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11945 /* This is zero if not using X windows. */
9653
cfc5e15e0baf (x_sync): Take frame ptr as arg.
Richard M. Stallman <rms@gnu.org>
parents: 9580
diff changeset
11946 x_in_use = 0;
9014
7b805f79f3b4 (Fx_list_fonts): Use a cache stored in FRAME_X_SCREEN.
Richard M. Stallman <rms@gnu.org>
parents: 8961
diff changeset
11947
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11948 /* The section below is built by the lisp expression at the top of the file,
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11949 just above where these variables are declared. */
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11950 /*&&& init symbols here &&&*/
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11951 Qauto_raise = intern ("auto-raise");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11952 staticpro (&Qauto_raise);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11953 Qauto_lower = intern ("auto-lower");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11954 staticpro (&Qauto_lower);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11955 Qborder_color = intern ("border-color");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11956 staticpro (&Qborder_color);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11957 Qborder_width = intern ("border-width");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11958 staticpro (&Qborder_width);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11959 Qcursor_color = intern ("cursor-color");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11960 staticpro (&Qcursor_color);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
11961 Qcursor_type = intern ("cursor-type");
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1786
diff changeset
11962 staticpro (&Qcursor_type);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11963 Qgeometry = intern ("geometry");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11964 staticpro (&Qgeometry);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11965 Qicon_left = intern ("icon-left");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11966 staticpro (&Qicon_left);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11967 Qicon_top = intern ("icon-top");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11968 staticpro (&Qicon_top);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11969 Qicon_type = intern ("icon-type");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11970 staticpro (&Qicon_type);
12073
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
11971 Qicon_name = intern ("icon-name");
1b0018c43060 (Qicon_name): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 12051
diff changeset
11972 staticpro (&Qicon_name);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11973 Qinternal_border_width = intern ("internal-border-width");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11974 staticpro (&Qinternal_border_width);
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11975 Qleft = intern ("left");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11976 staticpro (&Qleft);
16254
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
11977 Qright = intern ("right");
3e8b16badf3d (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
Richard M. Stallman <rms@gnu.org>
parents: 16156
diff changeset
11978 staticpro (&Qright);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11979 Qmouse_color = intern ("mouse-color");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11980 staticpro (&Qmouse_color);
1874
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
11981 Qnone = intern ("none");
19cf50641d6c * frame.c (Fframe_parameters): Report the `minibuffer' parameter of
Jim Blandy <jimb@redhat.com>
parents: 1821
diff changeset
11982 staticpro (&Qnone);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11983 Qparent_id = intern ("parent-id");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11984 staticpro (&Qparent_id);
8942
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
11985 Qscroll_bar_width = intern ("scroll-bar-width");
a43f3b56ed47 (x_set_scroll_bar_width): New function.
Karl Heuer <kwzh@gnu.org>
parents: 8845
diff changeset
11986 staticpro (&Qscroll_bar_width);
2328
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
11987 Qsuppress_icon = intern ("suppress-icon");
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
11988 staticpro (&Qsuppress_icon);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11989 Qundefined_color = intern ("undefined-color");
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11990 staticpro (&Qundefined_color);
1994
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
11991 Qvertical_scroll_bars = intern ("vertical-scroll-bars");
73ce9dd21093 Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1932
diff changeset
11992 staticpro (&Qvertical_scroll_bars);
2294
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
11993 Qvisibility = intern ("visibility");
9bce20507666 Use the `visiblity' parameter to determine the initial state of
Jim Blandy <jimb@redhat.com>
parents: 2283
diff changeset
11994 staticpro (&Qvisibility);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11995 Qwindow_id = intern ("window-id");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11996 staticpro (&Qwindow_id);
23793
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
11997 Qouter_window_id = intern ("outer-window-id");
3f48dda0547a (Qouter_window_id): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 23411
diff changeset
11998 staticpro (&Qouter_window_id);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
11999 Qx_frame_parameter = intern ("x-frame-parameter");
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
12000 staticpro (&Qx_frame_parameter);
5671
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
12001 Qx_resource_name = intern ("x-resource-name");
5c597b8fbabe Find lwlib.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents: 5558
diff changeset
12002 staticpro (&Qx_resource_name);
7251
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
12003 Quser_position = intern ("user-position");
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
12004 staticpro (&Quser_position);
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
12005 Quser_size = intern ("user-size");
02cc4eee5928 (x_figure_window_size): Set USPosition only if user-position
Richard M. Stallman <rms@gnu.org>
parents: 7209
diff changeset
12006 staticpro (&Quser_size);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12007 Qscroll_bar_foreground = intern ("scroll-bar-foreground");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12008 staticpro (&Qscroll_bar_foreground);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12009 Qscroll_bar_background = intern ("scroll-bar-background");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12010 staticpro (&Qscroll_bar_background);
25528
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
12011 Qscreen_gamma = intern ("screen-gamma");
b5dd1bafd001 Include math.h. Add extern declaration for atof in case
Gerd Moellmann <gerd@gnu.org>
parents: 25511
diff changeset
12012 staticpro (&Qscreen_gamma);
28690
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
12013 Qline_spacing = intern ("line-spacing");
01a3287bb747 (x_set_line_spacing): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28597
diff changeset
12014 staticpro (&Qline_spacing);
28787
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
12015 Qcenter = intern ("center");
90e5b2abbd10 (Qcenter): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28747
diff changeset
12016 staticpro (&Qcenter);
30351
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
12017 Qcompound_text = intern ("compound-text");
a67fcab978bb (x_encode_text): New function.
Kenichi Handa <handa@m17n.org>
parents: 30224
diff changeset
12018 staticpro (&Qcompound_text);
35402
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
12019 Qcancel_timer = intern ("cancel-timer");
302fbe91e359 (Qcancel_timer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35360
diff changeset
12020 staticpro (&Qcancel_timer);
38183
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
12021 Qwait_for_wm = intern ("wait-for-wm");
3ef7b5a020b2 (Qwait_for_wm): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37946
diff changeset
12022 staticpro (&Qwait_for_wm);
42721
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12023 Qfullscreen = intern ("fullscreen");
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12024 staticpro (&Qfullscreen);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12025 Qfullwidth = intern ("fullwidth");
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12026 staticpro (&Qfullwidth);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12027 Qfullheight = intern ("fullheight");
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12028 staticpro (&Qfullheight);
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12029 Qfullboth = intern ("fullboth");
462e0bbae65d (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth): New variables.
Eli Zaretskii <eliz@gnu.org>
parents: 42247
diff changeset
12030 staticpro (&Qfullboth);
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
12031 /* This is the end of symbol initialization. */
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
12032
26876
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
12033 /* Text property `display' should be nonsticky by default. */
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
12034 Vtext_property_default_nonsticky
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
12035 = Fcons (Fcons (Qdisplay, Qt), Vtext_property_default_nonsticky);
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
12036
578acd06aa3b Include intervals.h.
Kenichi Handa <handa@m17n.org>
parents: 26808
diff changeset
12037
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12038 Qlaplace = intern ("laplace");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12039 staticpro (&Qlaplace);
31633
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12040 Qemboss = intern ("emboss");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12041 staticpro (&Qemboss);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12042 Qedge_detection = intern ("edge-detection");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12043 staticpro (&Qedge_detection);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12044 Qheuristic = intern ("heuristic");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12045 staticpro (&Qheuristic);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12046 QCmatrix = intern (":matrix");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12047 staticpro (&QCmatrix);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12048 QCcolor_adjustment = intern (":color-adjustment");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12049 staticpro (&QCcolor_adjustment);
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12050 QCmask = intern (":mask");
829ed9cc42da (QCmatrix, QCcolor_adjustment, QCmask, Qemboss)
Gerd Moellmann <gerd@gnu.org>
parents: 31543
diff changeset
12051 staticpro (&QCmask);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12052
18631
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
12053 Qface_set_after_frame_default = intern ("face-set-after-frame-default");
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
12054 staticpro (&Qface_set_after_frame_default);
62bcc6aff013 (x_set_font): Funcall Qface_set_after_frame_default.
Richard M. Stallman <rms@gnu.org>
parents: 18612
diff changeset
12055
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12056 Fput (Qundefined_color, Qerror_conditions,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12057 Fcons (Qundefined_color, Fcons (Qerror, Qnil)));
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12058 Fput (Qundefined_color, Qerror_message,
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12059 build_string ("Undefined color"));
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12060
974
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
12061 init_x_parm_symbols ();
4f88a1b78a46 * xfns.c (x_get_arg): Return Qunbound for an unspecified
Jim Blandy <jimb@redhat.com>
parents: 833
diff changeset
12062
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12063 DEFVAR_BOOL ("cross-disabled-images", &cross_disabled_images,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12064 doc: /* Non-nil means always draw a cross over disabled images.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12065 Disabled images are those having an `:conversion disabled' property.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12066 A cross is always drawn on black & white displays. */);
31651
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
12067 cross_disabled_images = 0;
aef83f9e7dac (lookup_image): Build mask before applying an algorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 31637
diff changeset
12068
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12069 DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path,
49080
ec331b35847e (syms_of_xfns) <Vx_bitmap_file_path>: Doc fix.
Dave Love <fx@gnu.org>
parents: 48693
diff changeset
12070 doc: /* List of directories to search for window system bitmap files. */);
12036
035d4ee6cc80 (syms_of_xfns): Allow PATH_BITMAPS to be a colon-separated list.
Karl Heuer <kwzh@gnu.org>
parents: 12019
diff changeset
12071 Vx_bitmap_file_path = decode_env_path ((char *) 0, PATH_BITMAPS);
9563
ca99ee51077f Include paths.h.
Richard M. Stallman <rms@gnu.org>
parents: 9543
diff changeset
12072
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12073 DEFVAR_LISP ("x-pointer-shape", &Vx_pointer_shape,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12074 doc: /* The shape of the pointer when over text.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12075 Changing the value does not affect existing frames
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12076 unless you set the mouse color. */);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12077 Vx_pointer_shape = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12078
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12079 DEFVAR_LISP ("x-resource-name", &Vx_resource_name,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12080 doc: /* The name Emacs uses to look up X resources.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12081 `x-get-resource' uses this as the first component of the instance name
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12082 when requesting resource values.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12083 Emacs initially sets `x-resource-name' to the name under which Emacs
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12084 was invoked, or to the value specified with the `-name' or `-rn'
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12085 switches, if present.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12086
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12087 It may be useful to bind this variable locally around a call
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12088 to `x-get-resource'. See also the variable `x-resource-class'. */);
4146
0c681748d0ce * xfns.c (Fx_open_connection): Don't trust HAVE_XRMSETDATABASE;
Jim Blandy <jimb@redhat.com>
parents: 3923
diff changeset
12089 Vx_resource_name = Qnil;
3170
647229114f47 * xfns.c: Make resource manager work correctly even when
Jim Blandy <jimb@redhat.com>
parents: 3141
diff changeset
12090
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12091 DEFVAR_LISP ("x-resource-class", &Vx_resource_class,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12092 doc: /* The class Emacs uses to look up X resources.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12093 `x-get-resource' uses this as the first component of the instance class
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12094 when requesting resource values.
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12095
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12096 Emacs initially sets `x-resource-class' to "Emacs".
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12097
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12098 Setting this variable permanently is not a reasonable thing to do,
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12099 but binding this variable locally around a call to `x-get-resource'
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12100 is a reasonable practice. See also the variable `x-resource-name'. */);
16966
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
12101 Vx_resource_class = build_string (EMACS_CLASS);
df9f838f255a (Vx_resource_class): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16732
diff changeset
12102
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
12103 #if 0 /* This doesn't really do anything. */
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12104 DEFVAR_LISP ("x-nontext-pointer-shape", &Vx_nontext_pointer_shape,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12105 doc: /* The shape of the pointer when not over text.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12106 This variable takes effect when you create a new frame
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12107 or when you set the mouse color. */);
2936
f9956cdb0d1d (syms_of_xfns): Don't make Lisp vars
Richard M. Stallman <rms@gnu.org>
parents: 2885
diff changeset
12108 #endif
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12109 Vx_nontext_pointer_shape = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12110
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12111 DEFVAR_LISP ("x-hourglass-pointer-shape", &Vx_hourglass_pointer_shape,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12112 doc: /* The shape of the pointer when Emacs is busy.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12113 This variable takes effect when you create a new frame
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12114 or when you set the mouse color. */);
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
12115 Vx_hourglass_pointer_shape = Qnil;
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
12116
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12117 DEFVAR_BOOL ("display-hourglass", &display_hourglass_p,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12118 doc: /* Non-zero means Emacs displays an hourglass pointer on window systems. */);
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
12119 display_hourglass_p = 1;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12120
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12121 DEFVAR_LISP ("hourglass-delay", &Vhourglass_delay,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12122 doc: /* *Seconds to wait before displaying an hourglass pointer.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12123 Value must be an integer or float. */);
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
12124 Vhourglass_delay = make_number (DEFAULT_HOURGLASS_DELAY);
27864
ea05cbe65943 (inhibit_busy_cursor, busy_count): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27798
diff changeset
12125
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
12126 #if 0 /* This doesn't really do anything. */
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12127 DEFVAR_LISP ("x-mode-pointer-shape", &Vx_mode_pointer_shape,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12128 doc: /* The shape of the pointer when over the mode line.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12129 This variable takes effect when you create a new frame
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12130 or when you set the mouse color. */);
2936
f9956cdb0d1d (syms_of_xfns): Don't make Lisp vars
Richard M. Stallman <rms@gnu.org>
parents: 2885
diff changeset
12131 #endif
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12132 Vx_mode_pointer_shape = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12133
16396
4e4cc27b2a2a (x_set_internal_border_width): Only change
Richard M. Stallman <rms@gnu.org>
parents: 16357
diff changeset
12134 DEFVAR_LISP ("x-sensitive-text-pointer-shape",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12135 &Vx_sensitive_text_pointer_shape,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12136 doc: /* The shape of the pointer when over mouse-sensitive text.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12137 This variable takes effect when you create a new frame
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12138 or when you set the mouse color. */);
7683
be3423efbdce (Vx_sensitive_text_pointer_shape):
Richard M. Stallman <rms@gnu.org>
parents: 7599
diff changeset
12139 Vx_sensitive_text_pointer_shape = Qnil;
6759
e0938c42218c (syms_of_xfns): Define Vx_cross_pointer_shape.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents: 6610
diff changeset
12140
33960
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
12141 DEFVAR_LISP ("x-window-horizontal-drag-cursor",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12142 &Vx_window_horizontal_drag_shape,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12143 doc: /* Pointer shape to use for indicating a window can be dragged horizontally.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12144 This variable takes effect when you create a new frame
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12145 or when you set the mouse color. */);
33960
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
12146 Vx_window_horizontal_drag_shape = Qnil;
1f92a2d65681 (Vx_window_horizontal_drag_shape): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 33747
diff changeset
12147
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12148 DEFVAR_LISP ("x-cursor-fore-pixel", &Vx_cursor_fore_pixel,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12149 doc: /* A string indicating the foreground color of the cursor box. */);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12150 Vx_cursor_fore_pixel = Qnil;
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12151
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12152 DEFVAR_LISP ("x-max-tooltip-size", &Vx_max_tooltip_size,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12153 doc: /* Maximum size for tooltips. Value is a pair (COLUMNS . ROWS).
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12154 Text larger than this is clipped. */);
38574
79a0d7b341b3 (Vx_max_tooltip_size): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38548
diff changeset
12155 Vx_max_tooltip_size = Fcons (make_number (80), make_number (40));
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12156
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12157 DEFVAR_LISP ("x-no-window-manager", &Vx_no_window_manager,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12158 doc: /* Non-nil if no X window manager is in use.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12159 Emacs doesn't try to figure this out; this is always nil
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12160 unless you set it to something else. */);
12209
5537ed125771 (syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12190
diff changeset
12161 /* We don't have any way to find this out, so set it to nil
5537ed125771 (syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12190
diff changeset
12162 and maybe the user would like to set it to t. */
5537ed125771 (syms_of_xfns): Initialize Vx_no_window_manager. Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12190
diff changeset
12163 Vx_no_window_manager = Qnil;
8170
d92a24366b22 (x_toolkit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8103
diff changeset
12164
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12165 DEFVAR_LISP ("x-pixel-size-width-font-regexp",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12166 &Vx_pixel_size_width_font_regexp,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12167 doc: /* Regexp matching a font name whose width is the same as `PIXEL_SIZE'.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12168
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12169 Since Emacs gets width of a font matching with this regexp from
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12170 PIXEL_SIZE field of the name, font finding mechanism gets faster for
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12171 such a font. This is especially effective for such large fonts as
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12172 Chinese, Japanese, and Korean. */);
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12173 Vx_pixel_size_width_font_regexp = Qnil;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12174
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12175 DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12176 doc: /* Time after which cached images are removed from the cache.
39905
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12177 When an image has not been displayed this many seconds, remove it
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12178 from the image cache. Value must be an integer or nil with nil
542a86892257 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39862
diff changeset
12179 meaning don't clear the cache. */);
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
12180 Vimage_cache_eviction_delay = make_number (30 * 60);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12181
8170
d92a24366b22 (x_toolkit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8103
diff changeset
12182 #ifdef USE_X_TOOLKIT
39862
da336e9d1ab5 (syms_of_xfns): Update calls to Fprovide.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39812
diff changeset
12183 Fprovide (intern ("x-toolkit"), Qnil);
12094
a9fda5417acf (syms_of_xfns): Provide motif in Motif version.
Karl Heuer <kwzh@gnu.org>
parents: 12080
diff changeset
12184 #ifdef USE_MOTIF
39862
da336e9d1ab5 (syms_of_xfns): Update calls to Fprovide.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39812
diff changeset
12185 Fprovide (intern ("motif"), Qnil);
37210
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
12186
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12187 DEFVAR_LISP ("motif-version-string", &Vmotif_version_string,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39907
diff changeset
12188 doc: /* Version info for LessTif/Motif. */);
37210
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
12189 Vmotif_version_string = build_string (XmVERSION_STRING);
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
12190 #endif /* USE_MOTIF */
8b47704e0150 (Vmotif_version_string) [USE_MOTIF]: New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37173
diff changeset
12191 #endif /* USE_X_TOOLKIT */
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12192
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12193 defsubr (&Sx_get_resource);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12194
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12195 /* X window properties. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12196 defsubr (&Sx_change_window_property);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12197 defsubr (&Sx_delete_window_property);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12198 defsubr (&Sx_window_property);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12199
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
12200 defsubr (&Sxw_display_color_p);
8779
12c6296bbb4b (Fx_display_grayscale_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8758
diff changeset
12201 defsubr (&Sx_display_grayscale_p);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
12202 defsubr (&Sxw_color_defined_p);
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26571
diff changeset
12203 defsubr (&Sxw_color_values);
4279
d69483b37e0a (MAXREQUEST): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 4269
diff changeset
12204 defsubr (&Sx_server_max_request_size);
2276
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12205 defsubr (&Sx_server_vendor);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12206 defsubr (&Sx_server_version);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12207 defsubr (&Sx_display_pixel_width);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12208 defsubr (&Sx_display_pixel_height);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12209 defsubr (&Sx_display_mm_width);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12210 defsubr (&Sx_display_mm_height);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12211 defsubr (&Sx_display_screens);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12212 defsubr (&Sx_display_planes);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12213 defsubr (&Sx_display_color_cells);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12214 defsubr (&Sx_display_visual_class);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12215 defsubr (&Sx_display_backing_store);
68328c3af38f (x_screen): Make this var file scope.
Richard M. Stallman <rms@gnu.org>
parents: 2197
diff changeset
12216 defsubr (&Sx_display_save_under);
2328
82e4fed9cdd6 * xfns.c (Fx_parse_geometry): Renamed from Fx_geometry.
Jim Blandy <jimb@redhat.com>
parents: 2295
diff changeset
12217 defsubr (&Sx_parse_geometry);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
12218 defsubr (&Sx_create_frame);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12219 defsubr (&Sx_open_connection);
9690
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
12220 defsubr (&Sx_close_connection);
f6d4e1acb5a1 (Fx_create_frame): Don't increment refernce_count
Richard M. Stallman <rms@gnu.org>
parents: 9653
diff changeset
12221 defsubr (&Sx_display_list);
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12222 defsubr (&Sx_synchronize);
28044
88db4c84b6fd Remove a buch of really old code in #if 0.
Gerd Moellmann <gerd@gnu.org>
parents: 28010
diff changeset
12223 defsubr (&Sx_focus_frame);
34549
708ea44ef3c0 (Fx_backspace_delete_keys_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34524
diff changeset
12224 defsubr (&Sx_backspace_delete_keys_p);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12225
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12226 /* Setting callback functions for fontset handler. */
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12227 get_font_info_func = x_get_font_info;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12228
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12229 #if 0 /* This function pointer doesn't seem to be used anywhere.
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12230 And the pointer assigned has the wrong type, anyway. */
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12231 list_fonts_func = x_list_fonts;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12232 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12233
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12234 load_font_func = x_load_font;
21549
3b63301ea296 (syms_of_xfns): Initialize find_ccl_program_func.
Kenichi Handa <handa@m17n.org>
parents: 21536
diff changeset
12235 find_ccl_program_func = x_find_ccl_program;
17048
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12236 query_font_func = x_query_font;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12237 set_frame_fontset_func = x_set_font;
2da4e24ceee5 Include charset.h and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16966
diff changeset
12238 check_window_system_func = check_x;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12239
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12240 /* Images. */
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12241 Qxbm = intern ("xbm");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12242 staticpro (&Qxbm);
35360
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
12243 QCconversion = intern (":conversion");
ba490eed8f66 (QCconversion): Replaces QCalgorithm.
Gerd Moellmann <gerd@gnu.org>
parents: 35275
diff changeset
12244 staticpro (&QCconversion);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12245 QCheuristic_mask = intern (":heuristic-mask");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12246 staticpro (&QCheuristic_mask);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12247 QCcolor_symbols = intern (":color-symbols");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12248 staticpro (&QCcolor_symbols);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12249 QCascent = intern (":ascent");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12250 staticpro (&QCascent);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12251 QCmargin = intern (":margin");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12252 staticpro (&QCmargin);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12253 QCrelief = intern (":relief");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12254 staticpro (&QCrelief);
25628
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
12255 Qpostscript = intern ("postscript");
98e238950125 (x_build_heuristic_mask): Accept a list `(R G B)'
Gerd Moellmann <gerd@gnu.org>
parents: 25620
diff changeset
12256 staticpro (&Qpostscript);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12257 QCloader = intern (":loader");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12258 staticpro (&QCloader);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12259 QCbounding_box = intern (":bounding-box");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12260 staticpro (&QCbounding_box);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12261 QCpt_width = intern (":pt-width");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12262 staticpro (&QCpt_width);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12263 QCpt_height = intern (":pt-height");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12264 staticpro (&QCpt_height);
25620
1c991744ce13 (QCindex): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25593
diff changeset
12265 QCindex = intern (":index");
1c991744ce13 (QCindex): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25593
diff changeset
12266 staticpro (&QCindex);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12267 Qpbm = intern ("pbm");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12268 staticpro (&Qpbm);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12269
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12270 #if HAVE_XPM
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12271 Qxpm = intern ("xpm");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12272 staticpro (&Qxpm);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12273 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12274
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12275 #if HAVE_JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12276 Qjpeg = intern ("jpeg");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12277 staticpro (&Qjpeg);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12278 #endif
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12279
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12280 #if HAVE_TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12281 Qtiff = intern ("tiff");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12282 staticpro (&Qtiff);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12283 #endif
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12284
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12285 #if HAVE_GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12286 Qgif = intern ("gif");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12287 staticpro (&Qgif);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12288 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12289
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12290 #if HAVE_PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12291 Qpng = intern ("png");
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12292 staticpro (&Qpng);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12293 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12294
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12295 defsubr (&Sclear_image_cache);
29938
be81ae7e0218 (Fimage_size): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29882
diff changeset
12296 defsubr (&Simage_size);
31637
c1f4bdbf8465 (ALLOC_XPM_COLORS): Define if we can use Emacs' color
Gerd Moellmann <gerd@gnu.org>
parents: 31633
diff changeset
12297 defsubr (&Simage_mask_p);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12298
36252
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
12299 hourglass_atimer = NULL;
a8630c63f7d5 Rename everything containing *busy_cursor* and similar
Gerd Moellmann <gerd@gnu.org>
parents: 35859
diff changeset
12300 hourglass_shown_p = 0;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12301
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12302 defsubr (&Sx_show_tip);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12303 defsubr (&Sx_hide_tip);
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
12304 tip_timer = Qnil;
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12305 staticpro (&tip_timer);
34450
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
12306 tip_frame = Qnil;
5de00bff5de3 (Fx_hide_tip): Avoid unnecessary work when there's
Gerd Moellmann <gerd@gnu.org>
parents: 34321
diff changeset
12307 staticpro (&tip_frame);
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12308
35067
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
12309 last_show_tip_args = Qnil;
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
12310 staticpro (&last_show_tip_args);
7ca0048f8615 (x_create_tip_frame): Preserve the value of
Gerd Moellmann <gerd@gnu.org>
parents: 35042
diff changeset
12311
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12312 #ifdef USE_MOTIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12313 defsubr (&Sx_file_dialog);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12314 #endif
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12315 }
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12316
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12317
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12318 void
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12319 init_xfns ()
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12320 {
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12321 image_types = NULL;
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12322 Vimage_types = Qnil;
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12323
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12324 define_image_type (&xbm_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12325 define_image_type (&gs_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12326 define_image_type (&pbm_type);
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12327
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12328 #if HAVE_XPM
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12329 define_image_type (&xpm_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12330 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12331
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12332 #if HAVE_JPEG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12333 define_image_type (&jpeg_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12334 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12335
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12336 #if HAVE_TIFF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12337 define_image_type (&tiff_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12338 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12339
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12340 #if HAVE_GIF
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12341 define_image_type (&gif_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12342 #endif
49322
2cbb0b823e83 GTK version
Jan Djärv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
12343
24994
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12344 #if HAVE_PNG
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12345 define_image_type (&png_type);
d549b7ac676d (x_real_positions): Don't subtract window borders
Gerd Moellmann <gerd@gnu.org>
parents: 24905
diff changeset
12346 #endif
389
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12347 }
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12348
6e0510766e66 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12349 #endif /* HAVE_X_WINDOWS */